php mb_detect_encoding判斷字符串編碼方法
來源:程序員人生 發布時間:2013-11-29 21:00:02 閱讀次數:3118次
在php中利用mb_detect_encoding可以判斷給我們的字符是那個類型的編碼了,從而我們就可以利用inconv進行字符轉換了,下面給大家介紹幾個例子.
例子,利用mb_detect_encoding()判斷字符是否為uft-8編碼,代碼如下:
- $encode = mb_detect_encoding($q, array('GB2312','GBK','UTF-8'));
- echo $encode."<br/>";
- if($encode=="GB2312")
- {
- $q = iconv("GBK","UTF-8",$q);
- }
- else if($encode=="GBK")
- {
- $q = iconv("GBK","UTF-8",$q);
- }
- else if($encode=="EUC-CN")
- {
- $q = iconv("GBK","UTF-8",$q);
- }
- else
- {
-
- }
可是 mb_detect_encoding 存在一個硬傷,經常出現判斷不準確的情況,或許這樣就可以解決,代碼如下:
-
- function is_utf8 ($str) {
- if ($str === iconv('UTF-8', 'UTF-8//IGNORE', $str)) {
- return 'UTF-8';
- }
- }
-
- function detect_encoding ($str) {
- foreach (array('GBK', 'UTF-8') as $v) {
- if ($str === iconv($v, $v . '//IGNORE', $str)) {
- return $v;
- }
- }
- }
通過以上方式得到字符串編碼信息后,就可以利用 iconv 或 mb_convert_encoding 來轉換編碼了.
問題:可是當 $keytitle = '%D0%BE%C6%AC'; 時,檢測結果卻是UTF-8,這其實不算是bug,我們不應當過于依賴mb_detect_encoding,當字符串較短時,檢測結果產生偏差的可能性很大.
解決方法,代碼如下:
$encode = mb_detect_encoding($keytitle, array('ASCII','GB2312′,'GBK’,'UTF-8');
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈