【问题标题】:What is the preferable character encoding order for "mb_detect_encoding( )" in PHP?PHP 中“mb_detect_encoding()”的首选字符编码顺序是什么?
【发布时间】:2012-07-31 17:53:08
【问题描述】:

作为mb_detect_encoding( ) 的第二个参数传递的首选字符编码顺序是什么。

我之所以这样问是因为某些字符编码与其他字符编码重叠,例如 UTF(在某些情况下)返回 ASCII 和 gb2312 的 EUC-CN,以及 EUC-CN、EUC-JP、EUC-KR、EUC-TW 中的任何一个传递给函数的序列中出现的较早的返回为简体中文 EUC-CN 兼容字符串。

以下是我收集的一些,但我想让列表尽可能全面。

EUC-CN
EUC-JP
EUC-KR
EUC-TW
SJIS
ASCII
JIS
UTF-8
EUC-JP
EUC-CN
EUC-KR
EUC-TW
SJIS

请帮助我更正顺序并使此列表尽可能大。

编辑 1:

我想要做的就是将任何字符串转换为 utf8。

编辑 2:

考虑到以下建议, 我想尽量减少在编码转换中浪费文本的可能性,因为转换后的文本是我的网站唯一依赖的东西。 所以,即使我使用的解决方案不是完美的。请您演示最可靠的解决方案吗?

【问题讨论】:

  • 嗯,是的,许多编码彼此无法区分。这就是为什么准确的自动检测通常是不可能的。如您所见,此功能可能对少数候选人有用,但对大量候选人无用。在此之上,您需要一个统计文本分析器来提高准确性,这不是 PHP 内置的。你不应该一开始就使用编码检测。

标签: php utf-8 character-encoding mbstring


【解决方案1】:

没有真正的首选顺序可以为您提供最准确的响应。

总会有一些字符串可能被检测到并且在多个字符集中有效。 mb_detect_encoding 无法确定哪个是正确的。

解决这个问题的唯一方法是:

  1. 让懂语言的人来选择正确的编码。
  2. 可能分析字符串中的实际文本,并“猜测”最有可能是正确的。

对于第二个,我不知道现成的选项,但我可以想象诸如字符出现率、贝叶斯过滤器、神经网络和字典检查之类的东西可能有用;)

【讨论】:

  • 我可以补充一下:如果你不知道你的文本的编码,那么其他地方就有问题。
  • @InternetSeriousBusiness PEBKAC?
  • 通常,文档会包含编码信息,例如$ curl -I http://stackoverflow.com --silent | fgrep charsetContent-Type: text/html; charset=utf-8en.wikipedia.org/wiki/Character_encodings_in_HTML
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多