3 回答
TA贡献1111条经验 获得超0个赞
你所要求的是非常困难的。如果可能,让用户指定编码是最好的。防止攻击不应该更容易或更难。
但是,您可以尝试这样做:
iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text);
将其设置为严格可能会帮助您获得更好的结果。
TA贡献1828条经验 获得超3个赞
在祖国俄罗斯,我们有4种流行的编码,所以你的问题在这里有很大的需求。
只有符号的char代码才能检测到编码,因为代码页相交。一些不同语言的代码页甚至有完整的交集。所以,我们需要另一种方法。
使用未知编码的唯一方法是使用概率。所以,我们不想回答“这个文本的编码是什么?”这个问题,我们试图理解“ 这个文本最有可能的编码是什么? ”。
俄罗斯科技博客中的一个人发明了这种方法:
在您想要支持的每个编码中构建字符代码的概率范围。你可以使用你的语言中的一些大文本来构建它(例如,一些小说,使用莎士比亚的英语和托尔斯泰的俄语,哈哈)。你会得到像这样的smth:
encoding_1: 190 => 0.095249209893009, 222 => 0.095249209893009, ... encoding_2: 239 => 0.095249209893009, 207 => 0.095249209893009, ... encoding_N: charcode => probabilty
下一个。您可以使用未知编码的文本和“概率词典”中的每个编码来搜索未知编码文本中每个符号的频率。符号的概率概率。具有更高评级的编码可能是赢家。更大的文本更好的结果。
如果您有兴趣,我很乐意帮助您完成这项任务。我们可以通过构建两个charcodes概率列表来大大提高准确性。
顺便说一句。mb_detect_encoding certanly不起作用。是的,完全没有。请查看“ext / mbstring / libmbfl / mbfl / mbfl_ident.c”中的mb_detect_encoding源代码。
TA贡献1744条经验 获得超4个赞
你可能已经尝试过了,但为什么不使用mb_convert_encoding函数呢?它将尝试自动检测所提供文本的字符集,或者您可以将其传递给列表。
另外,我试图运行:
$text = "fiancée";echo mb_convert_encoding($text, "UTF-8");echo "<br/><br/>";echo iconv(mb_detect_encoding($text), "UTF-8", $text);
两者的结果都是一样的。你如何看待你的文字被截断为'fianc'?是在数据库中还是在浏览器中?
- 3 回答
- 0 关注
- 320 浏览
添加回答
举报