【发布时间】:2019-12-30 01:46:21
【问题描述】:
我正在处理法语字符对话问题。当 PHP 收到一个 É 时,它会将其转换为 \xc3\x89 (基本上是 UTF-8 十六进制)。 É 在 mySQL 数据库中存储为 \u00c9 (基本上是 UTF-16 十六进制)。我需要将前者转换为后者,以便它们匹配。 json_encode() 应该可以工作
//$criteria is \xc3\x89
error_log("criteria vvvvvvvvvvvvv");
error_log($criteria);
$clean = json_encode($criteria, JSON_UNESCAPED_SLASHES);
error_log("json_encode() 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"
为什么要添加额外的斜线?它使字符不匹配。我怎么没有那个?是阿帕奇吗? ZF1? PHP 7.0.1? ubuntu 16.04?
【问题讨论】:
-
你能试试
error_log以外的东西吗?目前尚不清楚需要进行哪些额外处理。 -
值得
\u00c9不是 UTF-16,而是一个 unicode 代码点。不过,这并不能解决您的问题 -
不是斜线。它被命名为反斜杠。从 docs 获取 JSON 常量:“JSON_UNESCAPED_SLASHES - 不要转义 /。”所以它与反斜杠无关。
标签: php apache zend-framework character-encoding char