问题 json_encode utf-8

2022-08-30 21:30:19

我对带有特殊字符json_encode函数有问题。

例如,我尝试这个:

$string="Svrček";

echo "ENCODING=".mb_detect_encoding($string); //ENCODING=UTF-8

echo "JSON=".json_encode($string); //JSON="Svr\u010dek"

我该怎么做才能正确显示字符串,所以JSON=“Svrček”?

谢谢。


答案 1

json_encode()实际上并没有在那里输出 JSON*。它输出一个javascript字符串。(当您为其提供要编码的对象或数组时,它会输出 JSON。这很好,因为javascript字符串是你想要的。

在javascript(和JSON中)中,可以转义为.这两者是等效的。所以正在做的事情没有错。它应该工作正常。如果这真的给你带来了任何形式的问题,我会感到非常惊讶。但是,如果传输是安全的Unicode编码(UTF-8,通常是)†,也不需要它。如果要关闭转义,可以这样操作:.请注意,该标志是在 PHP 5.4.0 中引入的,在早期版本中不可用。č\u010djson_encode()json_encode('Svrček', JSON_UNESCAPED_UNICODE)JSON_UNESCAPED_UNICODE

顺便说一句,与@onteria_所说的相反,JSON确实使用UTF-8

JSON 文本的字符编码始终为 Unicode。UTF-8 是唯一在网络上有意义的编码,但也允许使用 UTF-16 和 UTF-32。


* 或者,至少,它没有输出 RFC 4627 中定义的 JSON。但是,JSON 还有其他定义,允许使用标量值

† JSON 可能采用 UTF-8、UTF-16LE、UTF-16BE、UFT-32LE 或 UTF-32BE。


答案 2

好吧,所以,在php脚本中建立数据库连接后,放这行,它应该可以工作,至少它解决了我的问题:

mysql_query('SET CHARACTER SET utf8');

推荐