[英]Json_encode Charset problem
当我使用json_encode编码我的多语言字符串时,它还会更改特殊字符。我应该怎么做才能保持它们不变。
例如
<?
echo json_encode(array('şüğçö'));
它返回类似[“ \\ u015f \\ u00fc \\ u011f \\ u00e7 \\ u00f6”的内容
但我想要[“şüğçö”]
试试吧:
<?
echo json_encode(array('şüğçö'), JSON_UNESCAPED_UNICODE);
在JSON中,字符串中的任何字符都可以用Unicode转义序列表示。 因此, "\ş\ü\ğ\ç\ö"
在语义上等于"şüğçö"
。
尽管这些字符也可以简单地使用,但是json_encode
可能更喜欢Unicode转义序列以避免字符编码问题。
首先,使用json_encode()
对字符串进行编码并将其保存在变量中。
然后,只需使用preg_replace()
再次将所有\\ uxxxx替换为unicode。
json_encode()
没有提供任何选项来选择5.4之前版本中的编码字符集。
PHP 5.4添加了选项JSON_UNESCAPED_UNICODE
,它JSON_UNESCAPED_UNICODE
您的需求。 请注意, json_encode
始终输出UTF-8。
<?php
print_r(json_decode(json_encode(array('şüğçö'))));
/*
Array
(
[0] => şüğçö
)
*/
那么,您是否真的需要使这些字符在JSON中不转义?
用于PHP 5.3.3的 Json_encode字符集解决方案
由于JSON_UNESCAPED_UNICODE
在PHP 5.3.3中不起作用,因此我们使用了此方法,并且该方法正在起作用。
$data = array(
'text' => 'Päiväkampanjat'
);
$json_encode = json_encode($data);
var_dump($json_encode); // text: "P\u00e4iv\u00e4kampanjat"
$unescaped_data = preg_replace_callback('/\\\\u(\w{4})/', function ($matches) {
return html_entity_decode('&#x' . $matches[1] . ';', ENT_COMPAT, 'UTF-8');
}, $json_encode);
var_dump($unescaped); // text is unescaped -> Päiväkampanjat
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.