zoukankan      html  css  js  c++  java
  • PHP自动识别字符集并完成转码

    YBlog能接收引用通告,但是因为YBlog自己使用的是utf-8编码,如果对方的博客系统使用gb2312的编码的话,POST过来就会出现乱码(除非对方POST前先转换编码)。在不能保证对方是否一定使用utf-8编码的情况下,自己做一个编码的检查和转换是很有必要的。写了个函数来完成这个工作,原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。

    如果是文件形式的编码检查,还可以直接check utf-8的BOM信息,关于这方面的东西,大家可以看看TP工具箱的编码转换功能,我在那个AppCodingSwitch类中写了比较详细的注释。

    话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。文件的检查与转码,看这里

    php代码
    1. //识别汉字编码,因为YBlog用的是utf-8,如果引用通告发过来的是gb2312的编码的话,需要可以识别并完成编码转换  
    2. function safeEncoding($string,$outEncoding = 'UTF-8')  
    3. {  
    4.     $encoding = "UTF-8";  
    5.     for($i=0;$i<strlen($string);$i++)  
    6.     {  
    7.         if(ord($string{$i})<128)  
    8.             continue;  
    9.  
    10.         if((ord($string{$i})&224)==224)  
    11.         {  
    12.             //第一个字节判断通过  
    13.             $char = $string{++$i};  
    14.             if((ord($char)&128)==128)  
    15.             {  
    16.                 //第二个字节判断通过  
    17.                 $char = $string{++$i};  
    18.                 if((ord($char)&128)==128)  
    19.                 {  
    20.                     $encoding = "UTF-8";  
    21.                     break;  
    22.                 }  
    23.             }  
    24.         }  
    25.         if((ord($string{$i})&192)==192)  
    26.         {  
    27.             //第一个字节判断通过  
    28.             $char = $string{++$i};  
    29.             if((ord($char)&128)==128)  
    30.             {  
    31.                 //第二个字节判断通过  
    32.                 $encoding = "GB2312";  
    33.                 break;  
    34.             }  
    35.         }  
    36.     }  
    37.       
    38.     if(strtoupper($encoding) == strtoupper($outEncoding))  
    39.         return $string;  
    40.     else 
    41.         return iconv($encoding,$outEncoding,$string);  
  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/zhouwenwu/p/2415256.html
Copyright © 2011-2022 走看看