Php json_encode json_UNESCAPED_斜杠不工作,仍在转义斜杠

Php json_encode json_UNESCAPED_斜杠不工作,仍在转义斜杠,php,character-encoding,Php,Character Encoding,我的自动完成搜索功能被破坏了,因为带有重音的字符是如何存储在mySQL中的 例如,在mySQL列中,É的存储方式类似于\u00c9 在接收用户输入并调用mySQL的PHP中,Éis\xc3\x89 json_encode()几乎可以完美地将“\xc3\x89”转换为“\u00c9” 除非它将其转换为“\\u00c9”,因此字符不匹配,即使它们都是É JSON_UNESCAPED_SLASHES选项不起作用。为什么不在反斜杠前面添加另一个反斜杠 我怎样才能让它工作 编辑:我刚刚在下面添加了实际代码

我的自动完成搜索功能被破坏了,因为带有重音的字符是如何存储在mySQL中的

例如,在mySQL列中,É的存储方式类似于\u00c9

在接收用户输入并调用mySQL的PHP中,Éis\xc3\x89

json_encode()几乎可以完美地将“\xc3\x89”转换为“\u00c9”

除非它将其转换为“\\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"
First用于防止转义“SLASHES”
/
,顾名思义,不要指望它会阻止转义backSLASHES
\

echo json_encode('/'); // prints "\/"
echo json_encode('/', JSON_UNESCAPED_SLASHES); // prints "/"
echo json_encode("\\", JSON_UNESCAPED_SLASHES); // prints "\\"
//note on line 3 : the input is 1 backslash
正如您所看到的,它只防止斜杠转义,而不是反斜杠

关于您的问题,如果您最终使用了类似于
\\u00c9
json\u encode
,那么您必须将此字符串作为输入
\u00c9
json\u encode()
没有任何错误,您将字符串“\u00c9”输入它不是Unicode字符
00c9
,它在字符串开头转义了反斜杠

您的
$criteria
变量可能包含一个JSON编码的字符串,如
“\u00c9”
,该字符串未使用该选项进行编码,换句话说,不要使用
JSON\u encode()
两次

看看这些例子,它可以把事情弄清楚

这个输出

"\u00c9"
"\\u00c9"
"\u00c9"
"\/"
"/"
"\\"
第一个用于防止转义“斜杠”
/
,顾名思义,不要指望它会阻止转义返回斜杠
\

echo json_encode('/'); // prints "\/"
echo json_encode('/', JSON_UNESCAPED_SLASHES); // prints "/"
echo json_encode("\\", JSON_UNESCAPED_SLASHES); // prints "\\"
//note on line 3 : the input is 1 backslash
正如您所看到的,它只防止斜杠转义,而不是反斜杠

关于您的问题,如果您最终使用了类似于
\\u00c9
json\u encode
,那么您必须将此字符串作为输入
\u00c9
json\u encode()
没有任何错误,您将字符串“\u00c9”输入它不是Unicode字符
00c9
,它在字符串开头转义了反斜杠

您的
$criteria
变量可能包含一个JSON编码的字符串,如
“\u00c9”
,该字符串未使用该选项进行编码,换句话说,不要使用
JSON\u encode()
两次

看看这些例子,它可以把事情弄清楚

这个输出

"\u00c9"
"\\u00c9"
"\u00c9"
"\/"
"/"
"\\"

谢谢您的意见$标准=“\xc3\x89”@在PHP7.0.1上使用
json\u encode(“\xc3\x89”)
?Yes-json\u encode(“\xc3\x89”,json\u UNESCAPED\u SLASHES”)输出
“\\u00c9”
。我花了太多时间试图让这个字符转换工作。感觉我就快到了,但这很令人沮丧。请查看此文件
我将采取任何解决方案将\xc3\x89转换为\u00c9(法语字符),谢谢您的输入$标准=“\xc3\x89”@在PHP7.0.1上使用
json\u encode(“\xc3\x89”)
?Yes-json\u encode(“\xc3\x89”,json\u UNESCAPED\u SLASHES”)输出
“\\u00c9”
。我花了太多时间试图让这个字符转换工作。感觉我就快到了,但这很令人沮丧。这个文件
我会采取任何方法将\xc3\x89转换为\u00c9(法语字符)吗?此时我尝试了您在编辑部分提供的代码,这是我的输出
[24-Aug-2019 06:06:47 UTC]标准VVVV[24-Aug-2019 06:06:47 UTC]É[24-Aug-2019 06:06:47 UTC]json_encode(标准)vvv[2019年8月24日06:06:47 UTC]“\u00c9”
请仔细检查您的
$criteria
变量。并确保它没有保存此字符串
\u00c9
,如果您设法解决了此问题,请告诉我。Good luckI尝试了您在编辑部分中提供的代码,这是我的输出
[24-Aug-2019 06:06:47 UTC]标准VVV[24-Aug-2019 06:06:47 UTC]É[24-Aug-2019 06:06:47 UTC]json_encode(criteria)VVV[24-Aug-2019 06:06:47 UTC]“\u00c9”
请仔细检查您的
$criteria变量。并确保它没有保存此字符串
\u00c9
,如果您设法解决了此问题,请告诉我。祝你好运