天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP編碼轉換函數 自動轉換字符集支持數組轉換

復制代碼 代碼如下:
// 自動轉換字符集 支持數組轉換
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))) {
//如果編碼相同或者非字符串標量則不轉換
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;
}
}

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

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

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

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

php技術PHP編碼轉換函數 自動轉換字符集支持數組轉換,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 天天日免费观看视频一1 | 邪恶肉肉全彩色无遮琉璃神社 | 亚洲这里只有精品 | 69精品国产人妻蜜桃国产毛片 | 国产人妻麻豆蜜桃色在线 | 精品一品国产午夜福利视频 | 欧美日韩久久久精品A片 | 亚洲精品免费网站 | 国产在线视频分类精品 | 伊人久久大香线蕉avapp下载 | 久草精品视频 | 挠黑色超薄丝袜脚心vk40分钟 | 亚洲刺激视频 | 日本漫画之无彩翼漫画 | 国产成人精品亚洲线观看 | 暖暖视频免费观看社区 | 裸妇厨房风流在线观看 | 九色PORNY真实丨国产大胸 | 中文字幕永久在线 | 一本二卡三卡四卡乱码麻豆 | MMM日本兽交| 国产欧美另类久久久精品免费 | 国产成a人片在线观看视频99 | 国产美女久久久久久久久久久 | 亚洲精品乱码电影在线观看 | 99久久精品久久久 | 亚洲视频在线免费 | 四虎视频最新视频在线观看 | 欧美内射AAAAAAXXXXX | 哒哒哒影院在线观看免费高清 | 美女张开腿露出尿口扒开来摸动漫 | 办公室中文BD | 爱情岛论坛网亚洲品质 | 曼谷av女郎 | 美娇妻的性奴史1一4 | 亚洲精品福利一区二区在线观看 | 男人的天堂色偷偷 | 我半夜摸妺妺的奶C了她 | 男人到天堂a线牛叉在线 | 亚洲欧美色综合影院 | 6080YYY午夜理论片在线观看 |