【问题标题】:php json_encode bug patchphp json_encode 错误补丁
【发布时间】:2017-04-04 11:36:58
【问题描述】:

我在文本文件中有数据,我明智地将其加载到数组行,但最近我注意到当“μ”进入数据时,json_encode 重新运行空白响应,当我从数据中删除“μ”时,json_encode 函数工作

我有 php 版本 5.5.3

$dat = array("0"=>"hello","1"=>"world");
echo json_encode($dat);   // work

$data = array("0"=>"hello","1"=>"180.00 10µH");
echo json_encode($data);  // blank response .. 

我在 github php 页面上搜索了 json_enocde 函数,但都是 C 语言,

所以知道如何修补这个功能

【问题讨论】:

标签: php json


【解决方案1】:

使用以下代码:

function utf8_converter($array) {
    array_walk_recursive($array, function(&$item, $key) {
        if (!mb_detect_encoding($item, 'utf-8', true)) {
            $item = utf8_encode($item);
        }
    });

    return $array;
}

$data = array("0"=>"hello","1"=>"180.00 10µH");
$data = utf8_converter($data);
echo json_encode($data, JSON_PARTIAL_OUTPUT_ON_ERROR);

【讨论】:

  • 您的代码输出:["hello","180.00 10\u00b5H"]。注意µ 转换为各自的特殊字符(\u00b5)。
  • @BhavikShah 是的,对。它会做到的。但是,每当您使用 json_decode 将其转换回来时,它都会返回到它的原始形式。所以不用担心。
  • 我得到错误 utf8_encode() 期望参数 1 是字符串,数组在行中给出#
【解决方案2】:

试试这个:

$dat = array("0"=>"hello","1"=>"world");
echo json_encode($dat);   // work

$data = array("0"=>"hello","1"=>"180.00 10µH");
echo json_encode($data, JSON_UNESCAPED_UNICODE);

示例:https://ideone.com/cYDf8Y

【讨论】:

  • 我得到空白响应,可能是因为我的最终大数组是多维的
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2016-07-27
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
相关资源
最近更新 更多