问题json_encode utf-8

epi*_*i82 17 php json utf-8 character-encoding

我的json_encode函数有特殊字符的问题.

例如,我试试这个:

$string="Svr?ek";

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

echo "JSON=".json_encode($string); //JSON="Svr\u010dek"
Run Code Online (Sandbox Code Playgroud)

如何正确显示字符串,JSON ="Svrček"?

非常感谢你.

TRi*_*RiG 41

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

在javascript(和JSON)中,?可以转义为\u010.两者是等价的.所以json_encode()做的事情没有错.它应该工作正常.如果这实际上导致您遇到任何形式的问题,我会感到非常惊讶.但是,如果传输安全地采用Unicode编码(通常为UTF-8)†,则也不需要它.如果你想关闭逃逸,你可以这样做:json_encode('Svr?ek', JSON_UNESCAPED_UNICODE).请注意,该标志JSON_UNESCAPED_UNICODE是在PHP 5.4.0中引入的,在早期版本中不可用.

顺便说一下,与@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.

  • +1为JSON_UNESCAPED_UNICODE (4认同)
  • 请注意,`json_encode`不会发出转义的Unicode代码点.例如``json_encode('HelloJosé")`产生可怕的"Hello Jos\u00e9\ud83d\ude31"`.U + D83D和U + DE31不是合法的Unicode代码点.所以它发出了可怕的,可怕的UTF -16代码单元.它错误地将逻辑代码点与物理编码布局混淆,在Java和C#以及Windows等地方反复出现抽象违规. (2认同)

Vul*_*sin 11

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

mysql_query('SET CHARACTER SET utf8');
Run Code Online (Sandbox Code Playgroud)


ont*_*ia_ 7

是的,json_encode逃避非ascii字符.如果您解码它,您将获得原始结果:

$string="?????";
echo "ENCODING: " . mb_detect_encoding($string) . "\n";
$encoded = json_encode($string);
echo "ENCODED JSON: $encoded\n";
$decoded = json_decode($encoded);
echo "DECODED JSON: $decoded\n";
Run Code Online (Sandbox Code Playgroud)

输出:

ENCODING: UTF-8
ENCODED JSON: "\u3053\u3093\u306b\u3061\u306f"
DECODED JSON: ?????
Run Code Online (Sandbox Code Playgroud)

编辑:没什么值得的:

JSON独占使用Unicode.

描述结构和字段名称以及特定值的自记录格式;

资料来源:http://www.json.org/fatfree.html

它使用Unicode NOT UTF-8.此FAQ解释了UTF-8和Unicode之间的区别:

http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8

您使用JSON,您的非ascii字符将转义为Unicode代码点.例如,こ=代码点3053.

  • 不正确.[JSON确实使用UTF-8](http://stackoverflow.com/a/10835469/209139). (3认同)

归档时间:

查看次数:

65386 次

最近记录:

8 年,6 月 前