如何让json_encode()与ISO-8859-1(åäö)一起使用

时间:2009-09-08 14:21:37

标签: php json iso-8859-1

当我使用åäö时,

json_encode()对我不起作用。为什么?我怎样才能让它发挥作用?

php

echo json_encode($arr);

javascript

var theResponse = JSON.parse(xmlHttp.responseText);

当我alert()回复,而回复包含å,ä或ö时,回复为= NULL

请帮帮我......

7 个答案:

答案 0 :(得分:12)

它在json_encode() documentation中说:

  

此功能仅适用于UTF-8编码数据。

您应首先使用iconvmbstring将其转换为utf-8。

答案 1 :(得分:7)

正如格雷格所说,我不得不将åäö编码为UTF-8。但我没有使用iconv或mbstring。当utf8_encode()将所有值放入array之前,问题就解决了。

答案 2 :(得分:2)

JSON将字符串定义为Unicode!

JSON Definition

您必须将ISO编码为UTF-8

答案 3 :(得分:1)

老问题,但我想把它放在这里,以防有人需要使用json_encode记录数据,但保持数据不变,完好无损,以便以后检查。

您可以使用base64_encode对原始数据进行编码,然后它将与json_encode一起使用。运行json_decode后,您可以使用base64_decode对字符串进行解码,您将获得未修改的原始数据。

答案 4 :(得分:0)

从MySQL读取时使用标准方法:

$resultArray = array();
while($obj = MySQL_fetch_object($res)) {
 $resultArray[] = $obj;
}
$result = json_encode($resultArray);

可以使用以下方法完成编码:

$resultArray = array();
while($obj = MySQL_fetch_object($res)) {
 foreach($obj as $key => $value) {
  if (!is_null($value)) {
   $obj->$key = utf8_encode($value);
  }
 }
 $resultArray[] = $obj;
}
$result = json_encode($resultArray);

必须包含if is_null,以便输出中的空字段(例如,DateTime字段)保持为空。

答案 5 :(得分:0)

$data(在我的情况下)是一个文本值为 ISO-8859-1 的数组。以下技巧准备$datajson_encode一起使用。

function toUtf8(&$v, $k) {
    $v = utf8_encode($v);
}
array_walk_recursive($data, 'toUtf8');

答案 6 :(得分:0)

从PHP 5.4.0开始:

使用utf8_encode($ str)函数将数组中的字符串转换为utf-8。

然后使用JSON_UNESCAPED_UNICODE选项的json_encode:

$ arr = json_encode($ array,JSON_UNESCAPED_UNICODE);