網路城邦
上一篇 回創作列表 下一篇   字體:
用 php 判斷檔案是 utf8 編碼 還是 ANSI
2010/12/10 11:27:19瀏覽2179|回應0|推薦7

原由:常常接到客戶需求是要作簡體版或是日文版之類的雙位元語系的網站,但 Art 作的檔案編碼卻都是 big5,偏偏 Art 又懶得將一兩百頁的 htm 轉成 utf8

程式設計師一個一個去轉也是挺煩的,所以只好自己寫個程式,把Art給的原始檔案丟到某目錄,執行程式後 全部轉成要的格式
例如 big5 轉成 utf8 ,或 utf8 轉成 big5,這樣一兩百個檔案不用幾秒,確實比人工一個一個轉省事多了.

於是上網找了不少資料,但大多是說由類似Notepad另存新檔時自動加的檔頭BOM去判斷,甚至有偏激者發表與大力推行,只要所有的檔案都用檔頭BOM當識別,就解決所有問題了!
要檢測一個UTF-8文件是否含有BOM檔頭,就是檢測文件開頭的三個位元組,是否為0xEF,  0xBB,  0xBF。

但其實我們都知道 檔頭BOM 其實對一些編輯器或瀏覽器會造成多餘的字串甚至讓程式掛掉無法執行,所以並沒有解決所有的問題.

另外,無檔頭BOM的utf8檔案 ,在Notepad,Notepad++,UltraEdit,,,等等軟體,一樣可正常識別與存檔.不會因無BOM宣告中文就變成亂碼

所以結論是 有無檔頭BOM,應該都要能正常識別檔案的編碼,才是王道,才是真正解決了問題.

本人生性懶,就不引經據典去詳細解釋其中原理(因為寫起來落落長,且要去介紹各種編碼理中文所使用的區間),僅獻出簡單堪用的函式供有需要的人取用與改寫

/**
 * 判斷檔案是不是 utf8
return 0=不是 utf8,1=是utf8
*/
function checkUTF8($suc_file) {       
   $str=file_get_contents($suc_file);
      for($i = 0; $i < strlen($str); $i++){       
          $value = ord($str[$i]);       
          if($value > 127) {       
              if($value >= 192 && $value <= 247="" return="1;</p">

                else return (0);//.die('Not a UTF-8 compatible string');       
          }       
      }  
      return (0);    

( 興趣嗜好電腦3C )
列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=takaprog&aid=4683601