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);  
  • 相关阅读:
    Windows10如何添加开机启动项
    selenium自动化文件上传、文件下载
    windows下创建虚拟环境
    selenium 处理js日历控件
    selenium鼠标和键盘事件
    selenium绕过某宝验证,手动验证滑块
    python国内镜像源
    Linux下jenking安装
    发送邮件
    基于python的selenium两种文件上传操作
  • 原文地址:https://www.cnblogs.com/zhouwenwu/p/2415256.html
Copyright © 2011-2022 走看看