【问题标题】:How to get json_encode() to work with ISO-8859-1 (åäö)如何让 json_encode() 使用 ISO-8859-1 (åäö)
【发布时间】:2010-11-26 12:42:43
【问题描述】:

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

php:

echo json_encode($arr);

javascript

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

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

请帮帮我...

【问题讨论】:

  • 你得到什么输出?您使用的是哪个 JSON 库?
  • 如果包含 å、ä 或 ö,则输出为 NULL。 JSON 库是JSON.org/json2.js
  • 您使用的是什么 PHP 版本?我相信 json_encode() 的早期版本只能正确处理 UTF-8 字符串。在编码之前尝试utf8_encode-ing 字符串,看看是否有效。
  • PHP 版本是 5.something。尝试过utf8_encode,但对我不起作用。
  • 实际上utf8_encode 确实有效:) !!!又开心了。

标签: php json iso-8859-1


【解决方案1】:

上面写着json_encode() documentation

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我遇到了类似的问题,我有一个需要编码的关联数组。我已经尝试使用array_walk_recursive()if(is_string($input)) { return utf_encode($input); } else { return $input } 进行回调,但这似乎不起作用。有什么想法吗?
    • @Anticom 我下面的解决方案解决了这个问题。
    【解决方案3】:

    此函数将为 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));
    

    【讨论】:

    • 在我的情况下工作。谢谢。
    【解决方案4】:

    JSON 将字符串定义为 Unicode!

    JSON Definition

    您必须将 ISO 编码为 UTF-8

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        从 PHP 5.4.0 开始:

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

        然后json_encode 带有 JSON_UNESCAPED_UNICODE 选项:

        $arr = json_encode($array, JSON_UNESCAPED_UNICODE);

        【讨论】:

          【解决方案7】:

          从 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,以便空字段(例如,日期时间字段)在输出中保持为空。

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              猜你喜欢
              • 2011-05-08
              • 2015-10-11
              • 2011-06-10
              • 1970-01-01
              • 2011-08-07
              • 2013-01-19
              • 2012-05-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多