当我使用json_encode对我的多语言字符串进行编码时,它也会更改特殊字符。我应该怎么做才能使它们保持一致。
例如
<?
echo json_encode(array('şüğçö'));
返回类似[“\ u015f \ u00fc \ u011f \ u00e7 \ u00f6”]的内容
但我想要[“şüğçö”]
答案 0 :(得分:5)
试一试:
<?
echo json_encode(array('şüğçö'), JSON_UNESCAPED_UNICODE);
答案 1 :(得分:2)
在JSON中,字符串中的任何字符都可以由Unicode转义序列表示。因此"\u015f\u00fc\u011f\u00e7\u00f6"
在语义上等于"şüğçö"
。
虽然这些字符也可以使用plain,但json_encode
可能更喜欢Unicode转义序列以避免字符编码问题。
答案 2 :(得分:2)
首先,使用json_encode()
对字符串进行编码并将其保存在变量中。
然后只需使用preg_replace()
将所有\ uxxxx替换为unicode。
答案 3 :(得分:1)
json_encode()
没有提供任何选项来选择编码在5.4之前版本中的字符集。
答案 4 :(得分:1)
PHP 5.4添加了选项JSON_UNESCAPED_UNICODE
,它可以满足您的需求。请注意,json_encode
始终输出UTF-8。
答案 5 :(得分:0)
<?php
print_r(json_decode(json_encode(array('şüğçö'))));
/*
Array
(
[0] => şüğçö
)
*/
那么你真的需要将这些角色保留在JSON中吗?
答案 6 :(得分:0)
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