【发布时间】:2019-08-23 22:30:39
【问题描述】:
由于带有重音符号的字符在 mySQL 中的存储方式,我的自动完成搜索功能被破坏了。
例如,在 mySQL 列中,É 的存储方式类似于 \u00c9
在接收用户输入并调用mySQL的PHP中,É是\xc3\x89
json_encode() 几乎可以完美地将 "\xc3\x89" 转换为 "\u00c9"
$clean = json_encode($criteria, JSON_UNESCAPED_SLASHES);
除了将其转换为“\\u00c9”,因此即使它们都是 É,字符也不匹配。
JSON_UNESCAPED_SLASHES 选项不起作用。为什么它不阻止在反斜杠前面添加另一个反斜杠?
如何让它工作?
编辑:我刚刚在下面添加了实际代码和错误日志输出。代码:
error_log("criteria vvvvvvvvvvvvv");
error_log($criteria);
$clean = json_encode($criteria, JSON_UNESCAPED_SLASHES);
error_log("json_encode(criteria) vvvvvvvvvvvvvv");
error_log($clean);
错误日志:
[Fri Aug 23] criteria vvvvvvvvvvvvvvv,
[Fri Aug 23 \xc3\x89
[Fri Aug 23] json_encode(criteria) vvvvvvvvvvvvvvv,
[Fri Aug 23] "\\u00c9"
【问题讨论】:
-
我尝试了您在编辑部分提供的代码,这是我的输出
[24-Aug-2019 06:06:47 UTC] criteria vvvvvvvvvvvvv [24-Aug-2019 06:06:47 UTC] É [24-Aug-2019 06:06:47 UTC] json_encode(criteria) vvvvvvvvvvvvvv [24-Aug-2019 06:06:47 UTC] "\u00c9" -
请仔细检查您的
$criteria变量。并确保它不包含此字符串\u00c9,如果您设法解决了问题,请告诉我。祝你好运