PHP:将任何字符串转换为UTF-8,无需了解原始字符集,或者至少尝试转换。
PHP:将任何字符串转换为UTF-8,无需了解原始字符集,或者至少尝试转换。
我有一个应用程序,处理来自世界各地的客户,自然而然,我希望进入我的数据库的所有内容都是UTF-8编码的。
对于我来说,主要问题是我不知道任何字符串源的编码将是什么-它可能来自文本框(仅当用户实际提交表单时使用
admin 更改状态以发布 2023年5月24日
在祖国俄罗斯,我们有四种流行的编码方式,因此你的问题在这里备受关注。
仅通过符号的字符代码无法检测编码,因为码页会相互交叉。甚至,不同语言中的某些码页会完全重叠。因此,我们需要另一种方法。
处理未知编码的唯一方法是处理概率。因此,我们不想回答“这个文本的编码是什么?”这个问题,我们试图理解“这个文本最有可能采用哪种编码?”。
这里有个人在一个流行的俄罗斯技术博客中发明了这种方法:
在你想支持的每种编码中建立每个字符代码的概率范围。可以使用您的语言中的某些大量文本(例如一些小说,使用英语的莎士比亚和俄语的托尔斯泰,哈哈)。你会得到像这样的东西:
encoding_1: 190 => 0.095249209893009, 222 => 0.095249209893009, ... encoding_2: 239 => 0.095249209893009, 207 => 0.095249209893009, ... encoding_N: charcode => probabilty
接下来,对于未知编码的文本,对于“概率字典”中的每种编码,在未知编码的文本中搜索每个符号的频率。对符号的概率求和。具有更高评分的编码可能是胜利者。更大的文本会有更好的结果。
顺带一提,mb_detect_encoding根本不起作用。是的,根本不起作用。请查看“ext/mbstring/libmbfl/mbfl/mbfl_ident.c”中的mb_detect_encoding源代码。