關(guān)于PHP自動(dòng)判斷字符集并轉(zhuǎn)碼的詳解
更新時(shí)間:2013年06月26日 10:46:36 作者:
本篇文章是對(duì)PHP自動(dòng)判斷字符集并轉(zhuǎn)碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
原理很簡(jiǎn)單,因?yàn)間b2312/gbk是中文兩字節(jié),這兩個(gè)字節(jié)是有取值范圍的,而utf-8中漢字是三字節(jié),同樣每個(gè)字節(jié)也有取值范圍。而英文不 管在何種編碼情況下,都是小于128,只占用一個(gè)字節(jié)(全角除外)。
如果是文件形式的編碼檢查,還可以直接check utf-8的BOM信息。話(huà)不多說(shuō),直接上函數(shù),這個(gè)函數(shù)是用來(lái)對(duì)字符串進(jìn)行檢查和轉(zhuǎn)碼的。
<?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)
{
//第一個(gè)字節(jié)判斷通過(guò)
$char = $string{++$i};
if((ord($char)&128)==128)
{
//第二個(gè)字節(jié)判斷通過(guò)
$char = $string{++$i};
if((ord($char)&128)==128)
{
$encoding = "UTF-8";
break;
}
}
}
if((ord($string{$i})&192)==192)
{
//第一個(gè)字節(jié)判斷通過(guò)
$char = $string{++$i};
if((ord($char)&128)==128)
{
// 第二個(gè)字節(jié)判斷通過(guò)
$encoding = "GB2312";
break;
}
}
}
if(strtoupper($encoding) == strtoupper($outEncoding))
return $string;
else
return iconv($encoding,$outEncoding,$string);
}
?>
如果是文件形式的編碼檢查,還可以直接check utf-8的BOM信息。話(huà)不多說(shuō),直接上函數(shù),這個(gè)函數(shù)是用來(lái)對(duì)字符串進(jìn)行檢查和轉(zhuǎn)碼的。
復(fù)制代碼 代碼如下:
<?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)
{
//第一個(gè)字節(jié)判斷通過(guò)
$char = $string{++$i};
if((ord($char)&128)==128)
{
//第二個(gè)字節(jié)判斷通過(guò)
$char = $string{++$i};
if((ord($char)&128)==128)
{
$encoding = "UTF-8";
break;
}
}
}
if((ord($string{$i})&192)==192)
{
//第一個(gè)字節(jié)判斷通過(guò)
$char = $string{++$i};
if((ord($char)&128)==128)
{
// 第二個(gè)字節(jié)判斷通過(guò)
$encoding = "GB2312";
break;
}
}
}
if(strtoupper($encoding) == strtoupper($outEncoding))
return $string;
else
return iconv($encoding,$outEncoding,$string);
}
?>
您可能感興趣的文章:
相關(guān)文章
PHP mysql事務(wù)問(wèn)題實(shí)例分析
這篇文章主要介紹了PHP mysql事務(wù)問(wèn)題,結(jié)合實(shí)例形式分析了PHP操作MySQL的myisam數(shù)據(jù)庫(kù)實(shí)現(xiàn)控制事務(wù)的相關(guān)技巧,需要的朋友可以參考下2016-01-01
PHP+Ajax檢測(cè)用戶(hù)名或郵件注冊(cè)時(shí)是否已經(jīng)存在實(shí)例教程
這篇文章主要介紹了PHP+Ajax檢測(cè)用戶(hù)名或郵件注冊(cè)時(shí)是否已經(jīng)存在實(shí)例教程,是非常常見(jiàn)的一個(gè)重要功能,常用于論壇注冊(cè)部分或會(huì)員注冊(cè)部分,需要的朋友可以參考下2014-08-08
phpmyadmin 3.4 空密碼登錄的實(shí)現(xiàn)方法
很多時(shí)候我們?cè)诒緳C(jī)測(cè)試時(shí)會(huì)將root用戶(hù)密碼設(shè)置為空。2010-05-05
php通過(guò)文件頭檢測(cè)文件類(lèi)型通用代碼類(lèi)(zip,rar等)
在做web應(yīng)用時(shí)候,通過(guò)web擴(kuò)展名判斷上存文件類(lèi)型,這個(gè)是我們常使用的。2010-10-10
解析Win7 XAMPP apache無(wú)法啟動(dòng)的問(wèn)題
本篇文章是對(duì)Win7 XAMPP apache無(wú)法啟動(dòng)的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

