国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP自動識別字符集編碼并完成轉碼

2024-05-04 21:47:59
字體:
來源:轉載
供稿:網友

原理很簡單,因為gb2312/gbk是中文兩字節,這兩個字節是有取值范圍的,而utf-8中漢字是三字節,同樣每個字節也有取值范圍,而英文不管在何種編碼情況下,都是小于128,只占用一個字節,全角除外.

在PHP處理頁面的時候,我們對于字符集的轉換都是采用了iconv或者mb_convert等函數,但這其實是有一個前提的,即我們事先得知道in和out是什么樣的編碼,我們才能進行正確的轉換.

下面這個函數,就可以在不知道源字符串編碼的情況下,自動判斷其編碼并進行轉換,雖然只支持UTF8編碼和GB2312編碼,但對于國內絕大多數網站來說,已經夠用了,代碼如下:

  1. function safeEncoding($string,$outEncoding = 'UTF-8'
  2.     $encoding = "UTF-8"
  3.     for($i=0;$i<128) 
  4.             continue
  5.  
  6.         if((ord($string{$i})&224)==224) 
  7.         { 
  8.             //第一個字節判斷通過 
  9.             $char = $string{++$i}; 
  10.             if((ord($char)&128)==128) 
  11.             { 
  12.                 //第二個字節判斷通過 
  13.                 $char = $string{++$i}; 
  14.                 if((ord($char)&128)==128) 
  15.                 { 
  16.                     $encoding = "UTF-8"
  17.                     break
  18.                 } 
  19.             } 
  20.         } 
  21.         if((ord($string{$i})&192)==192) 
  22.         { 
  23.             //第一個字節判斷通過 
  24.             $char = $string{++$i}; 
  25.             if((ord($char)&128)==128) 
  26.             { 
  27.                 //第二個字節判斷通過 
  28.                 $encoding = "GB2312"
  29.                 break
  30.             } 
  31.         } 
  32.     } 
  33.  
  34.     if(strtoupper($encoding) == strtoupper($outEncoding)) 
  35.         return $string
  36.     else 
  37.         return iconv($encoding,$outEncoding,$string); 

識別漢字編碼,因為YBlog用的是utf-8,如果引用通告發過來的是gb2312的編碼的話,需要可以識別并完成編碼轉換,代碼如下:

  1. function safeEncoding($string,$outEncoding = 'UTF-8')   
  2. {   
  3.     $encoding = "UTF-8";   
  4.     for($i=0;$i<strlen($string);$i++)   
  5.     {   
  6.         if(ord($string{$i})<128)   
  7.             continue;   
  8.   
  9.         if((ord($string{$i})&224)==224)   
  10.         {   
  11.             //第一個字節判斷通過   
  12.             $char = $string{++$i};   
  13.             if((ord($char)&128)==128)   
  14.             {   
  15.                 //第二個字節判斷通過   
  16.                 $char = $string{++$i};   
  17.                 if((ord($char)&128)==128)   
  18.                 {   
  19.                     $encoding = "UTF-8";   
  20.                     break;   
  21.                 }   
  22.             }   
  23.         }   
  24.         if((ord($string{$i})&192)==192)   
  25.         {   
  26.             //第一個字節判斷通過   
  27.             $char = $string{++$i};   
  28.             if((ord($char)&128)==128)   
  29.             {   
  30.                 //第二個字節判斷通過   
  31.                 $encoding = "GB2312";   
  32.                 break;   
  33.             }   
  34.         }   
  35.     }   
  36.        
  37.     if(strtoupper($encoding) == strtoupper($outEncoding))   
  38.         return $string;   
  39.     else  
  40.         return iconv($encoding,$outEncoding,$string);   

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 峨眉山市| 买车| 宁陕县| 洛浦县| 乐平市| 新乡市| 南丹县| 平凉市| 扎囊县| 北票市| 安仁县| 峨边| 福鼎市| 色达县| 府谷县| 合水县| 丽水市| 泌阳县| 通山县| 南昌市| 内乡县| 柳林县| 同仁县| 平度市| 阿拉善盟| 黄骅市| 洛南县| 玉溪市| 芮城县| 鹤壁市| 二连浩特市| 定南县| 印江| 五华县| 宁陵县| 石泉县| 塔城市| 安陆市| 清苑县| 徐汇区| 临湘市|