json_encode与utf-8和unicode一起出现问题

时间:2017-01-30 00:54:25

标签: php json encoding character-encoding

我有一些问题,想要求一些帮助。

我的一些内容编辑器会添加我认为被视为unicode字符的字符。一个字符是省略号三个点,它占用一个空格而不是传统的......(计为3个字符)。另一个是撇号'而不是'这也和我有关。

以下是我正在做的粗略代码:

//Retrieve a list of content items. Each content item is an array, and all of the content items are inside their own array.
$myArray = _contentService->GetContentArray(); 

//so now $myArray is a two-dimensional array          

//One record inside the above array contains a key called 'description' whose value contains the ellipsis

die(json_encode($myArray, JSON_UNESCAPED_UNICODE ));

这不会产生任何结果(屏幕是白色的)。

die(json_encode($myArray)); //also produces a white screen.

所以最终的结果是我试图在二维数组上运行json_encode。当数组中每个数组的描述列由非unicode字符组成时,它可以正常工作并输出我的JSON数组。

当使用省略号或'时,整个屏幕变为白色而没有输出。

手册说你只需要为json_encode使用UTF-8编码,但是它也说更高版本支持JSON_UNESCAPED_UNICODE,但是这不会简单地将我的省略号转换为类似\ uxxxx吗?有没有办法真正保留省略号?

我尝试了StackOverflow的几个推荐,但在所有情况下都没有得到任何结果。我删除省略号的那一刻它工作正常。

我的想法是正确的,因为它的unicode会丢掉所有东西吗?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

这是一个丑陋的解决方案,但它应该有效;您可以手动将数组格式化并输出为JSON,而不是使用PHP函数对其进行编码。

echo '{';
foreach($myArray as $key => $value){
  if(is_array($value)){
    echo '"'.$key.'": [';
    foreach($value as $k => $v){
      echo '"'.$k.'":"'.$v.'",' . PHP_EOL;
    }
    echo ']';
  }else{
    echo '"'.$key.'":"'.$value.'",' . PHP_EOL;
  }
}
echo '}';

应该按原样输出,结构为JSON。无论最后处理这个JSON是什么,可能不得不在之后处理编码问题,但这应该正确地提供它。

这只是一个例子,您可能需要对其进行返工(可能使其成为一个功能,并对其进行迭代)以满足您的确切需求。