栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

json_encode()非utf-8字符串?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

json_encode()非utf-8字符串?

有没有一种方法可以使json_enpre()工作并显示这些字符,而不必在所有字符串上都使用utf8_enpre()并以“
u0082”之类的内容结尾?

如果你有一个ANSI编码的字符串,使用

utf8_enpre()
的是 错误的
函数来处理这个问题。您需要先将其从ANSI正确转换为UTF-8。这肯定会减少Unipre转义序列的数量,例如
u0082
从json输出中获取,但是从技术上讲,这些序列对json有效,您不必担心。

使用PHP将ANSI转换为UTF-8

json_enpre

适用于
UTF-8
编码字符串。如果需要从编码的字符串成功创建有效的字符串,则需要将其重新编码/转换为first。然后将按文档所述工作。
__
json``ANSI``UTF-8``json_enpre

要将编码从

ANSI
(更正确地说,我假设您有一个
Windows-1252
编码的字符串,该字符串很流行,但错误地称为
ANSI
)转换为
UTF-8
您可以使用以下
mb_convert_encoding()
函数:

$str = mb_convert_encoding($str, "UTF-8", "Windows-1252");

PHP中另一个可以转换字符串的编码/字符集的函数是

iconv
基于libiconv调用的。您也可以使用它:

$str = iconv("CP1252", "UTF-8", $str);

注意utf8_enpre()

utf8_enpre()
只为
Latin-1
而不是为
ANSI
。因此,当您通过该函数运行字符串时,将破坏该字符串中的部分字符。


有关返回内容的更细粒度控制

json_enpre()
,请参见预定义常量列表(取决于PHP版本,包括PHP
5.4,某些常量尚未记录,仅到目前为止在源代码中可用)。

更改数组编码/迭代(PDO注释)

正如您在注释中写道,将函数应用于数组有问题,这是一些代码示例。它 总是 需要
更改编码使用前

json_enpre
。这只是一个标准的数组操作,比较简单的情况下
pdo::fetch()
一个
foreach
迭代:

while($row = $q->fetch(PDO::FETCH_ASSOC)){  foreach($row as &$value)  {    $value = mb_convert_encoding($value, "UTF-8", "Windows-1252");  }  unset($value); # safety: remove reference  $items[] = array_map('utf8_enpre', $row );}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417010.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号