gpt4 book ai didi

php - PHP 中 mb_detect_order() 的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 12:48:48 27 4
gpt4 key购买 nike

我想检测一些文本的编码(使用 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', 'SJIS', 'eucJP-win', 'SJIS-win', 'JIS', 'ISO-2022-JP','ISO-8859-1','ISO-8859-2'));        
die($originalEncoding); // $originalEncoding = 'EUC-JP'



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

最佳答案

这是我希望发生的事情。

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

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

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

Due to its importance, automatic charset detection is already implemented in major Internet applications such as Mozilla or Internet Explorer. They are very accurate and fast, but the implementation applies many domain specific knowledges in case-by-case basis. As opposed to their methods, we aimed at a simple algorithm which can be uniformly applied to every charset, and the algorithm is based on well-established, standard machine learning techniques. We also studied the relationship between language and charset detection, and compared byte-based algorithms and character-based algorithms. We used Naive Bayes (NB) and Support Vector Machine (SVM).

关于php - PHP 中 mb_detect_order() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2881247/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com