最近也一直在和字串轉換打交道,比較常用到的就是這兩個php內建的字串轉換.那麼接下來我會以一些情境來使用這兩個字串編碼轉換函式
使用情境:
請求:ajax POST請求
伺服器編碼 GBK
頁面編碼 GBK
問題:因為ajax請求發出的資料都是utf-8格式的編碼,因此我們必須要將utf-8編碼的資料進行一個轉換
解決辦法1: 使用iconv
$postStr = file_get_contents("file://input"); // 將post的資料以字元流的形式讀取$inCharset = "UTF-8";$outCharset = "GBK";$postStr = iconv($inCharset,$outCharset,$postStr);// 將字串轉換為$_POST形式的數組parse_str($postStr,$_post);
解決辦法2: 使用mb_convert_encode()
$postStr = file_get_contents("file://input"); // 將post的資料以字元流的形式讀取$inCharset = "UTF-8";$outCharset = "GBK";$postStr = mb_convert_encode($postStr,$outCharset,$inCharset);// 將字串轉換為$_POST形式的數組parse_str($postStr,$_post);
以上兩種方法均可以進行字串轉碼,然而有一點需要注意,如果將轉換好的字串轉回去,切不可兩種方法混用.否則中文字元可能會出現階段的問題。
樣本:
$postStr = file_get_contents("file://input"); // 將post的資料以字元流的形式讀取$inCharset = "UTF-8";$outCharset = "GBK";$postStr = mb_convert_encode($postStr,$outCharset,$inCharset);// 轉換為原來的字串$postStr = iconv($outCharset,$inCharset."//IGNORE",$postStr);// 如果源 $postStr為 UTF-8的 '我是誰?'// 那麼新的 $postStr 為 '?' ,如果不加 "//IGNORE" 結尾 則會跑出一個異常
因此千萬不要嵌套兩個方法進行相互轉換。
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
').text(i)); }; $numbering.fadeIn(1700); }); });
以上就介紹了iconv 與 mb_convert_string 字串轉換,包括了ajax方面的內容,希望對PHP教程有興趣的朋友有所協助。