PHP中mb_detect_order()的奇怪行为

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP中mb_detect_order()的奇怪行为脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我想检测一些文本的编码(使用 PHP).
为此,我使用mb_detect_encoding()函数.

问题是如果我用Mb_detect_order()函数改变可能的编码顺序,函数会返回不同的结果.

请考虑以下示例

$htML = <<< STR
ちょっとのアクセスで落ちてしまったり、サーバー障害が多いレンタルサーバーを選ぶとあなたのビジネス等にかなりの影響がでてしまう可能性があります.特に商売をされている個人の方、法人の方は気をつけるようにしてください
STR;
mb_detect_order(array('UTF-8','EUC-JP','SJIS','eucJP-win','SJIS-win','JIS','ISO-2022-JP','ISO-8859-1','ISO-8859-2'));
$originalEncoding = mb_detect_encoding($str);
die($originalEncoding); // $originalEncoding = 'UTF-8'

但是,如果您更改mb_detect_order()中的编码顺序,结果将会有所不同:

mb_detect_order(array('EUC-JP','UTF-8','ISO-8859-2'));        
die($originalEncoding); // $originalEncoding = 'EUC-JP'

所以我的问题是:
为什么会这样?
PHP中有没有一种方法可以正确无误地检测文本的编码?

这就是我期望发生的事情.

检测算法可能只是按顺序继续尝试在mb_detect_order中指定的编码,然后返回字节流有效的第一个编码.

更智能的东西需要统计方法(我认为通常使用机器学习).

编辑:参见例如this article更智能的方法.

脚本宝典总结

以上是脚本宝典为你收集整理的PHP中mb_detect_order()的奇怪行为全部内容,希望文章能够帮你解决PHP中mb_detect_order()的奇怪行为所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。