Php 半个字符重音编码问题
在处理html源代码时,我目前面临一个非常奇怪的编码问题。 我得到了以下信息: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(到目前为止,很好),但我
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代码点。即使它没有解决我的问题,它也给了我一个非常重要的提示,所以我认为这应该被标记为已回答:)