11

json_encode()当我使用 åäö 时不会为我工作。为什么?我怎样才能让它工作?

php: _

echo json_encode($arr);

javascript: _

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

当我alert()响应时,响应包含 å、ä 或 ö,响应为 =NULL

请帮帮我...

4

8 回答 8

12

它在json_encode()文档中说:

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

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

于 2009-09-08T14:34:53.813 回答
7

正如 Greg 提到的,我必须将 åäö 编码为UTF-8. 但我没有使用 iconv 或 mbstring。当我utf8_encode()把所有的值都放到之前,array问题就解决了。

于 2009-09-14T15:22:55.800 回答
6

此函数将为 JSON 输出和 utf8_encode 字符串转换正确的数据类型。

    /* Change data-type from string to integar or float if required.
     * If string detected then utf8_encode() it. */
    function cast_data_types ($value) {
      if (is_array($value)) {
        $value = array_map('cast_data_types',$value);
        return $value;
      }
      if (is_numeric($value)) {
        if(strpos('.', $value)===false) return (float)$value;
        return (int) $value;
      }
      return utf8_encode((string)$value);
    }

json_encode (cast_data_types($data));
于 2015-05-09T13:52:11.070 回答
2

JSON 将字符串定义为 Unicode!

JSON 定义

您必须将 ISO 编码为 UTF-8

于 2009-10-26T12:15:18.713 回答
2

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

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

于 2017-01-12T16:49:00.630 回答
1

自 PHP 5.4.0 起:

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

然后json_encode使用JSON_UNESCAPED_UNICODE选项:

$arr = json_encode($array, JSON_UNESCAPED_UNICODE);

于 2019-05-31T18:58:16.630 回答
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以便空字段(例如,日期时间字段)在输出中保持为空。

于 2009-10-26T12:12:03.273 回答
0

(在我的例子中)是一个文本值为ISO-8859-1$data的数组。下面的技巧准备与.$datajson_encode

function toUtf8(&$v, $k) {
    $v = utf8_encode($v);
}
array_walk_recursive($data, 'toUtf8');
于 2014-11-06T19:55:50.477 回答