Json_encode Charset问题

时间:2010-06-14 06:58:13

标签: php json localization character-encoding

当我使用json_encode对我的多语言字符串进行编码时,它也会更改特殊字符。我应该怎么做才能使它们保持一致。

例如

<?
echo json_encode(array('şüğçö'));

返回类似[“\ u015f \ u00fc \ u011f \ u00e7 \ u00f6”]的内容

但我想要[“şüğçö”]

7 个答案:

答案 0 :(得分:5)

试一试:

<?
echo json_encode(array('şüğçö'), JSON_UNESCAPED_UNICODE);

答案 1 :(得分:2)

在JSON中,字符串中的任何字符都可以由Unicode转义序列表示。因此"\u015f\u00fc\u011f\u00e7\u00f6"在语义上等于"şüğçö"

虽然这些字符也可以使用plain,但json_encode可能更喜欢Unicode转义序列以避免字符编码问题。

答案 2 :(得分:2)

  • 你不应该想要这个
  • 即使没有PHP 5.4,也绝对有可能。

首先,使用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