PHP 自动识别字符集并完成转码详解
直接上函数,这个函数是用来对字符串进行检查和转码的。需要的朋友可以过来参考下
因为自己使用字符编码一般的是
utf-8 编码,但如果对方的博客使用 gb2312 编码的话,
POST 过来就会出现乱码(除非对方 POST 前先转换编码)。在不能保证对方是否一定使用
utf-8 编码的情况下,自己做一个编码的检查和转换是很有必要的。
写了个函数来完成这个工作,原理很简单,因为
gb2312/gbk 是中文两字节,这两个字节是
有取值范围的,而
utf-8 中汉字是三字节,同样每个字节也有取值范围。而英文不管在何种
编码情况下,都是小于
128,只占用一个字节(全角除外)。
如果是文件形式的编码检查,还可以直接
check utf-8 的 BOM 信息,关于这方面的东西,
大家可以看看
TP 工具箱的编码转换功能,我在那个 AppCodingSwitch 类中写了比较详细的
注释。
话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。文件的检查与转码
代码如下
:
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
;
}
}