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()添加反斜杠 (很抱歉英语不好,这不是我

我有一个PHP数组,里面有单词
的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"