Php 函数的作用是添加反斜杠
我有一个PHP数组,里面有单词Php 函数的作用是添加反斜杠,php,arrays,json,Php,Arrays,Json,我有一个PHP数组,里面有单词的morgens。我正在使用一个函数来转义单引号,json\u encode()向它添加另一个反斜杠,这会导致SQL代码中出现错误。参数JSON\u UNESCAPED\u SLASHES导致以下错误: 警告:json_encode()要求参数2为长字符串 在json_encode()之前,输出如下: 在json_encode()之后: 它的等价项(long,64)不起作用,它不会抛出错误。如何防止json\u encode()添加反斜杠 (很抱歉英语不好,这不是我
的morgens
。我正在使用一个函数来转义单引号,json\u encode()
向它添加另一个反斜杠,这会导致SQL代码中出现错误。参数JSON\u UNESCAPED\u SLASHES
导致以下错误:
警告:json_encode()要求参数2为长字符串
在json_encode()之前,输出如下:
在json_encode()之后:
它的等价项(long,64)不起作用,它不会抛出错误。如何防止json\u encode()
添加反斜杠
(很抱歉英语不好,这不是我的母语)
json_encode()要求参数2为长字符串
这意味着常量JSON\u UNESCAPED\u SLASHES
没有定义(它应该是64
),并且被隐式地视为字符串“JSON\u UNESCAPED\u SLASHES”
这意味着您使用的PHP版本太旧,无法支持JSON\u UNESCAPED\u斜杠
自5.4.0版以来,PHP一直支持JSON\u UNESCAPED\u斜杠
2015年,5.4分支机构停止运营。自从收到安全更新以来,已经三年多了。您使用的版本比该版本旧(即,至少4年零2个月不受支持的版本)
这意味着您的服务器存在严重的安全漏洞
解决方案:升级到受支持的PHP版本
更好的解决方案:升级到受支持的PHP版本,并采纳我之前评论中给出的建议:
与其尝试更改JSON的特定格式,不如更改生成SQL的代码,使其能够处理特殊字符。这可能只是意味着使用绑定参数而不是字符串连接。更好的是,不要将JSON硬塞进关系数据库——以一种合理的规范化形式将单独的数据位存储在不同的行/列/表中,您可以使用SQL进行适当的查询
json_encode()要求参数2为长字符串
这意味着常量JSON\u UNESCAPED\u SLASHES
没有定义(它应该是64
),并且被隐式地视为字符串“JSON\u UNESCAPED\u SLASHES”
这意味着您使用的PHP版本太旧,无法支持JSON\u UNESCAPED\u斜杠
自5.4.0版以来,PHP一直支持JSON\u UNESCAPED\u斜杠
2015年,5.4分支机构停止运营。自从收到安全更新以来,已经三年多了。您使用的版本比该版本旧(即,至少4年零2个月不受支持的版本)
这意味着您的服务器存在严重的安全漏洞
解决方案:升级到受支持的PHP版本
更好的解决方案:升级到受支持的PHP版本,并采纳我之前评论中给出的建议:
与其尝试更改JSON的特定格式,不如更改生成SQL的代码,使其能够处理特殊字符。这可能只是意味着使用绑定参数而不是字符串连接。更好的是,不要将JSON硬塞进关系数据库——以一种合理的规范化形式将单独的数据位存储在不同的行/列/表中,您可以使用SQL进行适当的查询
你在这里混淆了不同的东西
您的原始字符串,的morgens
,应该使用插入到数据库中。对于准备好的语句,您没有理由为数据库操作转义引号。如果您想转义它们,那么您应该在运行SQL语句之前直接转义。您通常不会json\u encode()
您的转义字符串,尽管这是可能的,也不应该引起问题
当您使用json\u encode()
对字符串进行编码时,当然以后必须使用json\u decode()
对其进行解码。如果你这样做,你的字符串就不会有两个反斜杠
json\u encode()
将整数作为第二个参数。您显然编写了类似于json\u encode($str,“json\u UNESCAPED\u SLASHES”)
,但它必须是json\u encode($str,json\u UNESCAPED\u SLASHES)
。但如前所述,在考虑(1)和(2)时,通常不需要此参数
所以我想你要做的第一件事就是清理:
- 插入到数据库:使用准备好的语句(或转义查询值)
- 传输数据:
json\u encode()
- 接收数据:
json\u decode()
你在这里混淆了不同的东西
- 您的原始字符串,
的morgens
,应该使用插入到数据库中。对于准备好的语句,您没有理由为数据库操作转义引号。如果您想转义它们,那么您应该在运行SQL语句之前直接转义。您通常不会json\u encode()
您的转义字符串,尽管这是可能的,也不应该引起问题
- 当您使用
json\u encode()
对字符串进行编码时,当然以后必须使用json\u decode()
对其进行解码。如果你这样做,你的字符串就不会有两个反斜杠
json\u encode()
将整数作为第二个参数。您显然编写了类似于json\u encode($str,“json\u UNESCAPED\u SLASHES”)
,但它必须是json\u encode($str,json\u UNESCAPED\u SLASHES)
。但如前所述,在考虑(1)和(2)时,通常不需要此参数
所以我想你要做的第一件事就是清理:
- 插入到数据库:使用准备好的语句(或转义查询值)
- 传输数据:
json\u encode()string(11) "\'s middags"
"\\'s middags"