Php 在哪里可以找到要转换的UTF8位到字符表,例如ñ&引用;变成ñ&引用;?

Php 在哪里可以找到要转换的UTF8位到字符表,例如ñ&引用;变成ñ&引用;?,php,utf-8,character-encoding,mojibake,Php,Utf 8,Character Encoding,Mojibake,我一直在网络上仔细搜索,似乎找不到一张有这种转换的表格。我发现的那些有一些错误,不太可靠,所以我找了一些官方表格或类似的表格,但不幸的是我没有。。所以我来了 正如标题中提到的,我想做的是,例如,知道“ñ”代表什么(这一个我已经知道了.“ñ”),但不仅仅是西班牙语字符,还有其他字符(我已经知道波兰语字符) 主要的问题是我在PHP中有一个字符串,它有时可能是“eñe”(这很好),而其他的则是“eñe”。。在后一个测试中,我应该能够将它改为“eñe”,这样它就可读了。。但如果它是好的,我不想改变它

我一直在网络上仔细搜索,似乎找不到一张有这种转换的表格。我发现的那些有一些错误,不太可靠,所以我找了一些官方表格或类似的表格,但不幸的是我没有。。所以我来了

正如标题中提到的,我想做的是,例如,知道“ñ”代表什么(这一个我已经知道了.“ñ”),但不仅仅是西班牙语字符,还有其他字符(我已经知道波兰语字符)

主要的问题是我在PHP中有一个字符串,它有时可能是“eñe”(这很好),而其他的则是“eñe”。。在后一个测试中,我应该能够将它改为“eñe”,这样它就可读了。。但如果它是好的,我不想改变它。为了做到这一点,我使用了utf8_解码函数,但如果字符串是可读的,它仍然会将“ñ”改为■" (但白色)…这就是为什么我不能总是解码字符串,如果我使用mb_detect_编码函数,我总是会得到“UTF-8”作为响应..但它没有那么大的帮助

一旦我知道所有的utf8位字符,比如“ñ”代表“ñ”,“Å”代表“Ź”,等等,我计划做一个基本上可以相互替换的函数。这和utf8_解码的功能差不多。除非这里有更好的解决方案

提前谢谢!
问候!

问题是,一旦您有了,就没有可靠的方法将其转换回原来的含义。有关问题的解释,请参阅:

考虑一个包含ISO-8859-1编码中的德语单词für的文本文件。现在使用文本编辑器打开该文件,该编辑器假定输入为UTF-8。由于第一个字节(
0x66
)在
0x00
0x7F
)范围内,UTF-8将其正确解释为
f
。第二个字节(
0xFC
)不是任何UTF-8编码字符开头的合法值。因此,文本编辑器可以用替换字符符号替换该字节,以警告用户出现错误。最后一个字节(
0x72
)也在代码范围
0x00
0x7F
内,可以正确解码。整个字符串现在显示如下:
f�r

一个执行不善的文本编辑器可能会以UTF-8格式保存替换;文本文件数据将如下所示:
0x66 0xEF 0xBF 0xBD 0x72
,它将在ISO-8859-1中再次显示为
fï½r
替换也会破坏原始字节,从而无法恢复预期的字符。


您需要避免从一开始就使用错误的编码错误地解释文本。在文本损坏时进行修复为时已晚。

为什么要这样做?是否要恢复损坏的数据

它实际上不应该作为常规业务代码流的一部分来完成。您需要做的只是确保您的webapp的所有层都正确使用UTF-8。PHP源代码、HTTP响应头和主体、DB表、DB连接等等。另请参阅

如果您确实想一次性恢复损坏的数据,那么最好知道问题中的损坏数据表示UTF-8数据,该数据被错误地存储或显示为ISO-8859-1。您只需将数据读取为ISO-8859-1,然后写入为UTF-8。一次。然后按正确的方式执行


作为证据,
ñ
()存在于Unicode(,一种多字节编码)中当使用ISO-8859-1这样的单字节编码对这些字节进行编码时,
0xC3
变成
Ã
0xB1
变成
±
。另请参见。

您的问题不仅仅是转码,而是解释问题。 在任何现代计算机上,ñ通常作为二进制0xc3b1输入,因为它是UTF-8代码。如果用旧的iso-latin-15代码解释它(不进行代码转换),则会得到0xc3=Ã,后跟0xb1=±。 这就是为什么没有“表”:这是一个显示问题

最好的办法是完全避免使用iso拉丁语。这会给你带来很多问题。修复你的程序的真正方法是:在任何地方都只使用utf-8,这将为你节省大量时间和麻烦

同时,如果您真的想将等效的iso-latin-15字符串提取到utf-8输入中(如果您没有这样做,如果您获得了上面的正确答案),您可以将字符串传递到任何代码转换器,要求它将utf-8转换为iso-latin-15。 需要注意的一件事是双重转码。如果您有一个utf-8字符串,并且错误地要求将iso-15转换为utf-8,那么您得到的utf-8字符串实际上是±,即二进制0xc383c2b1。要返回正确的utf-8字符串,anwser是相同的:要求将损坏的字符串从utf-8转换为iso-拉丁语-15,它很乐意接受0xc383并将其转换为0xc3,然后接受0xc2b1并将其转换为0xb1,从而为您提供一个包含正确ñ的正确utf-8字符串


特别是对于PHP和web应用程序,请记住许多计算机(以及将来越来越多的计算机)默认情况下,将向您发送utf-8。

附录:虽然针对Java EE Web开发人员,但您可能会发现了解更多有关字符编码的信息非常有用。事实上,我有一些损坏的文件需要修复。此外,我还必须修复邮件客户端中的一些编码问题,我正在开发的一个应用程序中有..但是您的回答是另外,我可以用其他方式来思考解决方案。问题是,每当我想得到俄语和其他西里尔语编码(我确实使用utf 8,但他们没有),函数mb_detect_encoding失败,因为它说它是UTF8,但实际上是KOI8-R。所以检测西里尔语单词的正则表达式可能是h