Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 半个字符重音编码问题_Php_Encoding_Utf 8 - Fatal编程技术网

Php 半个字符重音编码问题

Php 半个字符重音编码问题,php,encoding,utf-8,Php,Encoding,Utf 8,在处理html源代码时,我目前面临一个非常奇怪的编码问题。 我得到了以下信息: P.E.P.E.P.E.P.E.P.P.…< < /P> 当外部库执行utf8_解码时,我得到: “公关”…… 所以重音符号被放置在重音符号的右边。如果我从那个结果中做一个UTF8L编码,我就不会得到原来的“ReopeT.P.E.P.E.P.E.PAR……”,但我一直有“Reqt^ Pe ErtheEnter……” 更奇怪的是:如果我在记事本++中打开原始html,编码是utf8,没有BOM(到目前为止,很好),但我

在处理html源代码时,我目前面临一个非常奇怪的编码问题。 我得到了以下信息:

P.E.P.E.P.E.P.E.P.P.…< < /P> 当外部库执行utf8_解码时,我得到:

“公关”……

所以重音符号被放置在重音符号的右边。如果我从那个结果中做一个UTF8L编码,我就不会得到原来的“ReopeT.P.E.P.E.P.E.PAR……”,但我一直有“Reqt^ Pe ErtheEnter……”

更奇怪的是:如果我在记事本++中打开原始html,编码是utf8,没有BOM(到目前为止,很好),但我实际上可以通过文本选择(键盘或鼠标)选择一半字符。是的,一半。好像真正的代码是“e^”,但它显示为“ê”。当我试图将其复制到IDE时,它会复制“ê”,但会粘贴“e^”

我提出了一个基本的替换功能:

“e^”=>“ê”, “e´”=>“e”,

还有一些其他的法国案例,目前运作正常。 但是由于HTML有不同的语言,我很确定我不能成功地替换这个编码问题下的每个字符

以前有没有人面对过这个问题,并且(希望)有一个更普遍的解决方案


提前谢谢。

听起来您的HTML源代码正在使用。也就是说,它不是使用单个unicode字符来表示字母,而是首先使用常规的
e
,然后使用组合字符来添加变音符号
^
。您可以使用十六进制编辑器来验证这一点,以查看字符代码,在这种情况下,组合扬抑符是十六进制代码0302


另请参见。

您的内容类型是utf-8吗?您可能是对的。“ê”十六进制代码是:“\x65\xcc\x82”啊ok,所以0xCC 0x82是0302的UTF-8表示。好像还不够奇怪!因此,您需要在将其传递到外部解码库之前对其进行“规范化”,并将其转换为单个00EA(UTF-8 0xC3 0xAA),谢谢。仍然没有解决这个问题,但我将尝试类,它似乎将NFD转换为NFC代码点。即使它没有解决我的问题,它也给了我一个非常重要的提示,所以我认为这应该被标记为已回答:)