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);  
  • 相关阅读:
    《java程序设计》第三周学习总结
    《Java程序设计》第2周学习总结
    #20175201 实验一 Java开发环境的熟悉(Linux + Eclipse)
    学号 20175201张驰 《Java程序设计》第4周学习总结
    #学号 20175201张驰 《Java程序设计》第3周学习总结
    #学号 20175201张驰 《Java程序设计》第2周学习总结
    #学号 20175201张驰 《Java程序设计》第1周学习总结
    实现一个book类
    学号 20175329 2018-2019-3《Java程序设计》第六周学习总结
    20175229许钰玮 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
  • 原文地址:https://www.cnblogs.com/zhouwenwu/p/2415256.html
Copyright © 2011-2022 走看看