php中奇怪的utf8转换问题
所以我在做一个从文件中提取数据的项目,在文件中有些行需要utf8符号,但编码很奇怪,例如它们是\xC6而不是\Æ 如果我这样做:php中奇怪的utf8转换问题,php,mysql,utf-8,Php,Mysql,Utf 8,所以我在做一个从文件中提取数据的项目,在文件中有些行需要utf8符号,但编码很奇怪,例如它们是\xC6而不是\Æ 如果我这样做: $name = "\xC6ther"; $name = preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name); echo utf8_encode($name); $name = $row['OracleName']; $name = preg_replace('/x([a-fA-F0-9]{2})/', '\
$name = "\xC6ther";
$name = preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name);
echo utf8_encode($name);
$name = $row['OracleName'];
$name = preg_replace('/x([a-fA-F0-9]{2})/', '\&#$1;', $name);
$name = utf8_encode($name);
它很好用。我明白了:
Æther
但如果我从MySQL中提取相同的数据,并执行以下操作:
$name = "\xC6ther";
$name = preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name);
echo utf8_encode($name);
$name = $row['OracleName'];
$name = preg_replace('/x([a-fA-F0-9]{2})/', '\&#$1;', $name);
$name = utf8_encode($name);
然后我将其作为输出接收:
\&#C6;ther
有人知道这是为什么吗
根据请求,vardump为$row['OracleName']
string(15) "xC6ther Barrier"
在第二次怀孕时,更换为什么会出现
\
preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name);
好的,我想这里有些混乱。您的正则表达式正在匹配类似于x66
的内容,并将其替换为“B”,这对我来说似乎是一些html实体
编码,但您使用的是utf8\u编码
,它可以做到这一点(来自手册):
utf8_编码-将ISO-8859-1字符串编码为UTF-8
所以这些东西永远不会被转换。。。(或者更准确地说,B’将保留为B’,因为它们在ISO-8859-1和UTF-8中都是相同的字符)
还需要注意的是,在第一个代码段中,您使用了\xC6
,但这不会被preg\u replace
捕获,因为它已经是编码字符。\x
表示下一个十六进制数(0x00~0xFF)将按原样放入字符串中。它不会生成字符串xC6
所以我有点困惑你到底想做什么。preg_替换是关于什么的
如果要将HTML实体转换为UTF-8,请查看mb\u convert\u encoding
(),如果要执行相反的操作,请从一些UTF-8实体转换为HTML实体,查看htmlentities
()
如果它与所有这些都无关,而你只想改变编码
mb\u convert\u编码仍然存在 解决了问题,在SQL拉取中,我在preg_替换中遗漏了一个“x”
preg_replace('/x([a-fA-F0-9]{2})/', '&#x$1;', $name);
一旦我在x中添加了数据,它就发挥了巨大的作用。当从MySQL中提取数据时,它缺少前导\,尽管数据本身在MySQL表中。很抱歉,我没有领会你的意思,你能告诉我们如何查看$row['OracleName']
使用var\u dump
@技巧:我真的不知道你在做什么,但如果你的问题是修复的,那就没问题了nice@Trick:对,数字是十六进制的,所以应该是和#xNN
,但我仍然担心您的reg-exp匹配,例如xaa
,是一些不匹配的编码