gpt4 book ai didi

php - php中奇怪的utf8转换问题

转载 作者:行者123 更新时间:2023-11-29 15:07:08 25 4
gpt4 key购买 nike

所以我正在开发一个从文件中获取数据的项目,在文件中有些行需要 utf8 符号,但编码很奇怪,例如它们是\xC6 而不是\Æ

如果我这样做:

$name = "\xC6ther";
$name = preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name);
echo utf8_encode($name);

效果很好。我明白了:

Æther

但是如果我从 MySQL 中提取相同的数据,并执行以下操作:

$name = $row['OracleName'];
$name = preg_replace('/x([a-fA-F0-9]{2})/', '\&#$1;', $name);
$name = utf8_encode($name);

然后我收到以下输出:

\&#C6;ther

有人知道这是为什么吗?

根据要求,$row['OracleName'] 的 vardump;

string(15) "xC6ther Barrier" 

最佳答案

在你的第二个 preg_replace 上为什么有一个 \

preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name);

好吧,我认为这里有些困惑。您的正则表达式匹配诸如 x66 之类的内容,并将其替换为“B”,这对我来说似乎是一些 html 实体 编码,但您正在使用 utf8_encode 执行此操作(来自手册):

utf8_encode — Encodes an ISO-8859-1 string to UTF-8

所以这些东西永远不会被转换...(或者更准确地说,“B”将保留“B”,因为它们在 ISO-8859-1 和 UTF-8 中都是相同的字符)

还要注意的是,您在第一个片段中使用了 \xC6 ,但这永远不会被 preg_replace 捕获,因为它已经是编码字符。 \x 表示下一个十六进制数字 (0x00 ~ 0xFF) 将按原样放入字符串中。它不会生成字符串 xC6

所以我对你真正想做的事情有点困惑。 preg_replace 是怎么回事?

如果您想将 HTML 实体转换为 UTF-8,请查看 mb_convert_encoding ( manual ),如果您想执行相反的操作,请查看来自某些 UTF-8 的 HTML 实体中的代码 htmlentities (manual)

如果它与所有这些无关并且您只想更改编码mb_convert_encoding仍然存在。

关于php - php中奇怪的utf8转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com