日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

php支持 的编码,php编码转换函数(自动转换字符集支持数组转换)

發布時間:2025/3/15 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php支持 的编码,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编码转换函数(自动转换字符集支持数组转换)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。