繁体   English   中英

utf-8 和 unicode 的 json_encode 问题

[英]json_encode issues with utf-8 and unicode

我遇到了一些问题,想寻求帮助。

我的一些内容编辑器会添加我认为被视为 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而抛弃一切?

非常感谢!

这是一个有点丑陋的解决方案,但它应该有效; 您可以手动将数组格式化并输出为 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 是什么,之后可能必须处理编码问题,但这应该正确地传递它。

这只是一个示例,您可能需要对其进行修改(可能使其成为一个函数,并对其进行迭代)以满足您的确切需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM