Discuz教程网

PHP自动识别字符集并完成转码

[复制链接]
authicon dly 发表于 2011-3-30 16:27:31 | 显示全部楼层 |阅读模式
YBlog能接收引用通告,但是因为YBlog自己使用的是utf-8编码,如果对方的博客系统使用gb2312的编码的话,POST过来就会出现乱码(除非对方POST前先转换编码)。在不能保证对方是否一定使用utf-8编码的情况下,自己做一个编码的检查和转换是很有必要的。写了个函数来完成这个工作,原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。
如果是文件形式的编码检查,还可以直接check utf-8的BOM信息,关于这方面的东西,大家可以看看TP工具箱的编码转换功能,我在那个AppCodingSwitch类中写了比较详细的注释。
话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。文件的检查与转码
Java代码

  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);      
  41. }
复制代码






上一篇:php判断gif图片是否为动画
下一篇:Discuz X1.5看帖字数限制插件V1.9
authicon 82xiaochong911 发表于 2011-5-7 14:59:58 | 显示全部楼层
看看  好像不错
authicon lakelouise 发表于 2011-5-7 21:59:49 | 显示全部楼层
这个不错呀
authicon Pianissimo 发表于 2011-5-7 22:59:41 | 显示全部楼层
这个还是不错的!
authicon 风中徜徉 发表于 2011-5-8 05:59:59 | 显示全部楼层
不错,谢谢分享
authicon TRACYFLYING 发表于 2011-5-9 21:59:58 | 显示全部楼层
很好的,我喜欢
authicon 纤陌陌 发表于 2011-5-10 13:59:55 | 显示全部楼层
感谢分享  收下了·····
authicon YNKAZUKI 发表于 2011-5-11 01:59:36 | 显示全部楼层
这个还是不错的!
authicon kurt226 发表于 2011-5-11 10:59:57 | 显示全部楼层
万分感谢楼主
authicon 月之海洋 发表于 2011-5-11 12:59:45 | 显示全部楼层
回贴下载呀
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-1 13:18

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表