php json 添加反斜杠,关于php:json_encode()函数添加反斜杠

我有一个包含单词's morgens的PHP数组。我正在使用一个函数来转义单引号,json_encode()向它添加了另一个反斜杠,这会导致SQL代码中的错误。参数JSON_UNESCAPED_SLASHES导致以下错误:

Warning: json_encode() expects parameter 2 to be long, string given

输出如下,在json_encode()之前:

string(11)"\'s middags"

在json_encode()之后:

"\'s middags"

它的等效值(long,64)不起作用,也不会抛出错误。如何防止json_encode()添加反斜杠?

(抱歉英语不好,这不是我的母语)

你好像有点问题。不要试图更改JSON的特定格式,而是更改生成SQL的代码,以便它能够处理特殊字符。这可能只是意味着使用绑定参数而不是字符串串联。更好的是,不要将JSON推送到关系数据库中——将数据的独立位存储在不同的行/列/表中,以一种合理的规范化形式,您可以使用SQL进行正确的查询。

撇开这一点不谈,你的问题无论如何都要解决了。您没有提供明确的问题陈述(您说"参数json-unescaped-slashes导致错误"-什么错误?)你也没有提供一个最小的可重复的例子。

json_encode() expects parameter 2 to be long, string given

这意味着,该定义是不constant JSON_UNESCAPED_SLASHES(它应该是64),是被视为是implicitly "JSON_UNESCAPED_SLASHES"的弦乐。

这意味着你是使用一个PHP版本太旧JSON_UNESCAPED_SLASHES大的支持。

PHP支持JSON_UNESCAPED_SLASHES5.4.0已自版本。

5.4支去的生命在2015年结束。它已被超过三年以来,它获得了一个安全更新。你是一个上了年纪的煤,使用的版本(即,不支持一个已经被为至少4年和2个月)。

这意味着你的服务器有严重的安全孔。

解决方案:一个支持的升级版本的PHP。

升级到一个更好的解决方案支持:PHP版本也把给定的建议,在我早期的评论:

Instead of trying to change the specific format of the JSON, change the code which generates the SQL so it can handle special characters. This probably just means using bound arguments instead of string concatenation. Better still, don't shove JSON into a relational database - store the separate bits of data in different rows/columns/tables in a sensible normalised form that you can properly query with SQL.

在这种情况下,PHP应该打印一个通知。如果操作员没有看到,他应该首先打开错误报告。然后这似乎是一个xy问题,正如你自己写的…

你confusing不同的事情。

你原来的弦乐,'s morgens,应该是采用制备的大statements插入数据库。与制备statements,你有没有理由为数据库quotes逃离行动。如果你想逃离他们吧,然后你会因为它直接运行在SQL项声明的。你通常不json_encode()escaped弦乐的,虽然它是不可能的和提高的问题。

当你与你的json_encode()第一弦乐,你当然有它与后来在json_decode()解码。如果你做,你不会是在你的两backslashes弦乐。

作为第二argument integer json_encode()以安。你写什么像json_encode($str,"JSON_UNESCAPED_SLASHES")显而易见,但它已经成为json_encode($str, JSON_UNESCAPED_SLASHES)。但是作为argument提到,这是通常不需要当(1)和(2)是从成consideration。

所以我想为你做的第一件事是打扫:

插入到数据库:使用制备的statements(Escape的查询或价值)。

transmit json_encode()数据:

receive:json_decode()数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值