【发布时间】:2010-06-14 06:58:13
【问题描述】:
当我使用 json_encode 编码我的多语言字符串时,它也会更改特殊字符。我应该怎么做才能保持它们相同。
例如
<?
echo json_encode(array('şüğçö'));
它返回类似 ["\u015f\u00fc\u011f\u00e7\u00f6"]
但我想要 ["şüğçö"]
【问题讨论】:
标签: php json localization character-encoding
当我使用 json_encode 编码我的多语言字符串时,它也会更改特殊字符。我应该怎么做才能保持它们相同。
例如
<?
echo json_encode(array('şüğçö'));
它返回类似 ["\u015f\u00fc\u011f\u00e7\u00f6"]
但我想要 ["şüğçö"]
【问题讨论】:
标签: php json localization character-encoding
试试看:
<?
echo json_encode(array('şüğçö'), JSON_UNESCAPED_UNICODE);
【讨论】:
在 JSON 中,字符串中的任何字符都可以用 Unicode 转义序列表示。因此"\u015f\u00fc\u011f\u00e7\u00f6"在语义上等于"şüğçö"。
虽然这些字符也可以直接使用,但json_encode 可能更喜欢 Unicode 转义序列以避免字符编码问题。
【讨论】:
PHP 5.4 添加了选项JSON_UNESCAPED_UNICODE,它可以满足您的需求。请注意,json_encode 始终输出 UTF-8。
【讨论】:
首先,使用json_encode()对字符串进行编码并保存在一个变量中。
然后只需使用preg_replace() 再次将所有 \uxxxx 替换为 unicode。
【讨论】:
json_encode() 不提供任何选项来选择 5.4 之前的版本中编码所在的字符集。
【讨论】:
<?php
print_r(json_decode(json_encode(array('şüğçö'))));
/*
Array
(
[0] => şüğçö
)
*/
那么您真的需要在 JSON 中保持这些字符不转义吗?
【讨论】:
\u00e7 字符。
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
【讨论】: