PHP主动断定字符集并转码的办法分享
添加时间:2013-7-22 点击量:
PHP主动断定字符集并转码。
道理:
因为gb2312/gbk是中文两字节,这两个字节是有取值局限的,而utf-8中汉字是三字节,同样每个字节也有取值局限。而英文不 管在何种编码景象下,都是小于128,只占用一个字节(全角除外)。
若是是文件情势的编码搜检,还可以直接check utf-8的BOM信息。话不久不多说,直接上函数,这个函数是用来对字符串进行搜检和转码的。
代码如下:
<?php
/
主动断定字符集并转码
/
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;
}
}
} //by www.jbxue.com
if(strtoupper(¥encoding) == strtoupper(¥outEncoding))
return ¥string;
else
return iconv(¥encoding,¥outEncoding,¥string);
}
?>
所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》
PHP主动断定字符集并转码。
道理:
因为gb2312/gbk是中文两字节,这两个字节是有取值局限的,而utf-8中汉字是三字节,同样每个字节也有取值局限。而英文不 管在何种编码景象下,都是小于128,只占用一个字节(全角除外)。
若是是文件情势的编码搜检,还可以直接check utf-8的BOM信息。话不久不多说,直接上函数,这个函数是用来对字符串进行搜检和转码的。
代码如下:
<?php
/
主动断定字符集并转码
/
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;
}
}
} //by www.jbxue.com
if(strtoupper(¥encoding) == strtoupper(¥outEncoding))
return ¥string;
else
return iconv(¥encoding,¥outEncoding,¥string);
}
?>