PHP自动识别字符集编码并完成转码
原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围,而英文不管在何种编码情况下,都是小于128,只占用一个字节,全角除外.
在PHP处理页面的时候,我们对于字符集的转换都是采用了iconv或者mb_convert等函数,但这其实是有一个前提的,即我们事先得知道in和out是什么样的编码,我们才能进行正确的转换.
下面这个函数,就可以在不知道源字符串编码的情况下,自动判断其编码并进行转换,虽然只支持UTF8编码和GB2312编码,但对于国内绝大多数网站来说,已经够用了,代码如下:
function safeEncoding( $string , $outEncoding = 'UTF-8' ) { $encoding = "UTF-8" ; for ( $i =0; $i <128) continue ; if ((ord( $string { $i })&224)==224) { //第一个字节判断通过 $char = $string {++ $i }; if ((ord( $char )&128)==128) { //第二个字节判断通过 $char = $string {++ $i }; if ((ord( $char )&128)==128) { $encoding = "UTF-8" ; break ; } } } if ((ord( $string { $i })&192)==192) { //第一个字节判断通过 $char = $string {++ $i }; if ((ord( $char )&128)==128) { //第二个字节判断通过 $encoding = "GB2312" ; break ; } } } if ( strtoupper ( $encoding ) == strtoupper ( $outEncoding )) return $string ; else return iconv( $encoding , $outEncoding , $string ); }识别汉字编码,因为YBlog用的是utf-8,如果引用通告发过来的是gb2312的编码的话,需要可以识别并完成编码转换,代码如下:
function safeEncoding( $string , $outEncoding = 'UTF-8' ) { $encoding = "UTF-8" ; for ( $i =0; $i < strlen ( $string ); $i ++) { if (ord( $string { $i })<128) continue ; if ((ord( $string { $i })&224)==224) { //第一个字节判断通过 $char = $string {++ $i }; if ((ord( $char )&128)==128) { //第二个字节判断通过 $char = $string {++ $i }; if ((ord( $char )&128)==128) { $encoding = "UTF-8" ; break ; } } } if ((ord( $string { $i })&192)==192) { //第一个字节判断通过 $char = $string {++ $i }; if ((ord( $char )&128)==128) { //第二个字节判断通过 $encoding = "GB2312" ; break ; } } } if ( strtoupper ( $encoding ) == strtoupper ( $outEncoding )) return $string ; else return iconv( $encoding , $outEncoding , $string ); }查看更多关于PHP自动识别字符集编码并完成转码 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30140