【问题标题】:addslashes and json_encode not working togetheraddlashes 和 json_encode 不能一起工作
【发布时间】:2018-07-03 13:00:34
【问题描述】:
$val = "I'm string";

对于这种类型的字符串,我使用了addslashes 函数,它将字符串转换成这样的:

"I\'m string"

并存储到数据库中。当我从数据库中的字段数组中获取所有数据并在

中传递数组时
json_encode($arr);

作为回应,我得到带有额外斜杠的字符串,如下所示:

"I\\'m string"

我想删除由 json_encode 添加的额外斜杠。我是怎么做到的??

【问题讨论】:

  • 您不应该在数据库中使用 addlashes。使用准备好的语句。看起来你实际上是在字符串中添加一个文字斜线而不是转义撇号。
  • MYSQLI_PDO API 中使用prepared parameterized statements,这个问题就会消失,您不需要在任何地方使用 stripadd 斜杠
  • 如果你正确使用prepared statement,你就不需要addlashes
  • 是的,您根本不需要做任何特别的事情
  • 这个问题吸引了很多被否决的答案。如果您显示了写入数据库的代码,则不会发生这种情况

标签: php json addslashes


【解决方案1】:

如果你真的想知道这个问题的答案,你可以用stripslashes 反转你的addslashes

但是永远不要使用addslashes 函数来转义你要发送到mysql 的值。

使用本机准备好的语句,mysqli_real_escape_string()PDO::quote

但请注意:

  1. 不要使用易受攻击的字符集进行连接编码(使用 utf8 什么的)
  2. 使用高于 5.7.6 的 MySQL 版本。

在此处阅读有关字符集问题的更多信息:http://php.net/manual/en/mysqlinfo.concepts.charset.php

【讨论】:

  • 更改了我的答案以添加到编码问题。
  • 如果你在变量周围使用引号就足够安全了。
  • @RiggsFolly 错误NO_BACKSLASH_ESCAPES 已在 5.7.6 中修复。并且这两个功能都是安全的。但你是对的,应该提到你需要比 5.7.6 更高的版本。字符问题记录在 PHP 文档中。
【解决方案2】:

您可以使用stripslashes

但是,您应该使用准备好的语句。这样你就不必担心逃避你的价值观。

【讨论】:

    【解决方案3】:

    这甚至可能是可能的(尽管我认为它只是正斜杠/

    json_encode($array, JSON_UNESCAPED_SLASHES);
    

    但请注意 cmets 和 Script47 的回答并正确修复它。

    【讨论】:

    • 哇很好,那些反对票。会喜欢我的回答的一些反馈,因为你们都认为这显然是错误的?准备好的语句解决 OP 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2019-08-17
    • 2016-11-23
    • 2019-02-18
    • 2015-05-16
    • 2017-10-14
    • 2012-06-01
    相关资源
    最近更新 更多