激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP編碼轉換函數 自動轉換字符集支持數組轉換

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

2020-03-04 15:33PHP教程網 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'];

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 免费永久看羞羞片网站入口 | 国产流白浆高潮在线观看 | 国产精品嘿咻嘿咻在线播放 | 午夜精品久久久久久毛片 | 日韩黄网站| 色视频一区二区 | 中文字幕偷拍 | 久久精品视频2 | fc2成人免费人成在线观看播放 | 精品亚洲视频在线观看 | 91看片在线播放 | 亚洲天堂ww | 日本教室三级在线看 | 国产精品久久久久久久午夜片 | 欧美一级特黄aaaaaaa什 | 欧美顶级毛片在线播放小说 | 91看片在线观看视频 | 国产精品手机在线亚洲 | 欧美精品电影一区 | 中国大陆高清aⅴ毛片 | 色七七久久影院 | 91精品国产综合久久久动漫日韩 | xxxxhdvideosex| 全黄性性激高免费视频 | 国产精品视频导航 | 国产乱色精品成人免费视频 | av在线久草 | 在线成人av| 黄色va视频 | av在线免费观看中文字幕 | 亚洲人成网在线观看 | 国产成人精品一区二区仙踪林 | 一区二区三区四区免费 | 国产精品99久久久久久宅女 | 免费国产视频在线观看 | 91精品国产777在线观看 | 密室逃脱第一季免费观看完整在线 | 成人三级黄色片 | 精国产品一区二区三区 | 欧美一级特黄特色大片免费 | 日韩视频一 |