欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP編碼轉(zhuǎn)換函數(shù) 自動轉(zhuǎn)換字符集支持?jǐn)?shù)組轉(zhuǎn)換

 更新時間:2012年12月16日 14:57:27   作者:  
當(dāng)我們在接受未知客戶端提交的數(shù)據(jù),由于各客戶端的編碼不統(tǒng)一,但在我們的服務(wù)器端最終只能以一種編碼方式來處理,這種情況下就會涉及到編碼轉(zhuǎn)換問題

復(fù)制代碼 代碼如下:

// 自動轉(zhuǎn)換字符集 支持?jǐn)?shù)組轉(zhuǎn)換
function auto_charset($fContents, $from='gbk', $to='utf-8') {
$from = strtoupper($from) == 'UTF8' ? 'utf-8' : $from;
$to = strtoupper($to) == 'UTF8' ? 'utf-8' : $to;
if (strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents))) {
//如果編碼相同或者非字符串標(biāo)量則不轉(zhuǎn)換
return $fContents;
}
if (is_string($fContents)) {
if (function_exists('mb_convert_encoding')) {
return mb_convert_encoding($fContents, $to, $from);
} elseif (function_exists('iconv')) {
return iconv($from, $to, $fContents);
} else {
return $fContents;
}
} elseif (is_array($fContents)) {
foreach ($fContents as $key => $val) {
$_key = auto_charset($key, $from, $to);
$fContents[$_key] = auto_charset($val, $from, $to);
if ($key != $_key)
unset($fContents[$key]);
}
return $fContents;
}
else {
return $fContents;
}
}

當(dāng)我們在接受未知客戶端提交的數(shù)據(jù),由于各客戶端的編碼不統(tǒng)一,但在我們的服務(wù)器端最終只能以一種編碼方式來處理,這種情況下就會涉及到一個將接受到的字符轉(zhuǎn)換為特定編碼的問題。
這時可能會想到直接用iconv來進(jìn)行轉(zhuǎn)碼,但我們知道,iconv這個函數(shù)需要提供的兩個參數(shù)為輸入編碼和輸出編碼,而我們現(xiàn)在根本不知道接受的字符串是什么編碼,如果這個時候能得到接收字符是什么編碼就好了。
對于這樣的問題,一般會有兩種解決方案。

方案一
要客戶端提交數(shù)據(jù)時,指定所提交的編碼,這時就需要多給一個用來指定編碼的變量。
$string = $_GET['charset'] === 'gbk' ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];
對于這種情況,如果在沒有約定或者我們不能控制客戶端的情況下,似乎這種方案使用不是很好。

方案二
直接由服務(wù)器端來檢測所接收的數(shù)據(jù)編碼。
這種方案當(dāng)然是最理想了的了,現(xiàn)在問題是怎么檢測一個字符的編碼嗎?對于這種情況,在php里,mb_string這個擴(kuò)展中的mb_check_encoding提供了我們所需要的功能。
$str = mb_check_encoding($_GET['str'],'gbk') ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];
但這需要打開mb_string這個擴(kuò)展,有些時候可能我們的生產(chǎn)服務(wù)器中沒有打開這個擴(kuò)展。對于這種情況,需要自己借助如下函數(shù)來判斷編碼。
以下函數(shù)非本人所寫
復(fù)制代碼 代碼如下:

function isGb2312($string) {
for($i=0; $i 127) {
if( ($v >= 228) && ($v < = 233) )
{
if( ($i+2) >= (strlen($string) - 1)) return true;
$v1 = ord( $string[$i+1] );
$v2 = ord( $string[$i+2] );
if( ($v1 >= 128) && ($v1 < =191) && ($v2 >=128) && ($v2 < = 191) )
return false;
else
return true;
}
}
}
return true;
}
function isUtf8($string) {
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}

這里我們就可以使以上任何一個函數(shù)來實(shí)現(xiàn)編碼的檢測。并將其轉(zhuǎn)換成指定的編碼。
$str = isGb2312($_GET['str'],'gbk') ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];

相關(guān)文章

  • php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代碼解密

    php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29

    今天在百度知道上面有個朋友問php代碼解密的問題,看了代碼不是常見幾種比較感興趣,特意搜索了下,發(fā)現(xiàn)下面的方法,解決了,具體的看最后的說明。
    2011-01-01
  • php HTML無刷新提交表單

    php HTML無刷新提交表單

    這篇文章主要介紹了php HTML無刷新提交表單,本文介紹了兩種無刷新提交表單的方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 利用PHP生成靜態(tài)html頁面的原理

    利用PHP生成靜態(tài)html頁面的原理

    現(xiàn)在很多網(wǎng)站系統(tǒng),如dedecms、phpcms、帝國等知名內(nèi)容管理系統(tǒng)都提供生成靜態(tài)頁面的功能,這不光有利于搜索引擎的抓取,而且還能有效降低服務(wù)器壓力。對于學(xué)習(xí)PHP,將要從事WEB網(wǎng)站開發(fā)的朋友們來說,了解這個功能是必須的,下面來分享一下PHP生成靜態(tài)頁面的原理。
    2016-09-09
  • 深入php var_dump()函數(shù)的詳解

    深入php var_dump()函數(shù)的詳解

    本篇文章是對php var_dump()函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 關(guān)于JSON以及JSON在PHP中的應(yīng)用技巧

    關(guān)于JSON以及JSON在PHP中的應(yīng)用技巧

    這篇文章主要介紹了關(guān)于JSON以及JSON在PHP中的應(yīng)用技巧。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • php實(shí)現(xiàn)快速排序法函數(shù)代碼

    php實(shí)現(xiàn)快速排序法函數(shù)代碼

    取一個值與其他值進(jìn)行比較,小的放在這個值的左邊,大的放在這個值的右邊,然后按照這個方式遞歸
    2012-08-08
  • 詳解PHP使用OSS上傳文件

    詳解PHP使用OSS上傳文件

    這篇文章主要介紹了PHP使用OSS上傳文件,對OSS感興趣的同學(xué),可以參考并且實(shí)驗(yàn)一下
    2021-04-04
  • PHP面向?qū)ο笪宕笤瓌t之開放-封閉原則(OCP)詳解

    PHP面向?qū)ο笪宕笤瓌t之開放-封閉原則(OCP)詳解

    這篇文章主要介紹了PHP面向?qū)ο笪宕笤瓌t之開放-封閉原則(OCP),簡單分析了PHP面向?qū)ο箝_放-封閉原則(OCP)的概念、原理、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • PHP類中Static方法效率測試代碼

    PHP類中Static方法效率測試代碼

    因?yàn)橛泻脦讉€項(xiàng)目等著做,又不是很急,再加上目前成型的那些框架多多少少用著總是有點(diǎn)不太如意,所以決定先自己寫一個框架,然后再做項(xiàng)目。既然寫框架,自然要經(jīng)常做一些執(zhí)行效率上的測試,今天做了一個static效率的測試。
    2010-10-10
  • PHP安全配置

    PHP安全配置

    PHP其實(shí)不過是Web服務(wù)器的一個模塊功能,所以首先要保證Web服務(wù)器的安全。當(dāng)然Web服務(wù)器要安全又必須是先保證系統(tǒng)安全,這樣就扯遠(yuǎn)了,無窮無盡
    2006-12-12

最新評論