轉http://blog.csdn.net/u013372487/article/details/52528535php
iconv詳解:
iconv — 字符串按要求的字符編碼來轉換
iconv有bug ,碰到一些生僻字就會沒法轉換,固然了配置第二個參數時,能夠稍微彌補一下默認缺陷,不至於沒法轉換是截斷,用法以下
iconv(「UTF-8″,」GB2312//IGNORE」,$data) ;
這樣碰到生僻字轉換失敗時,它就會忽略失敗,繼續轉換下面的內容。數組
iconv
string iconv ( string $in_charset , string $out_charset , string $str ) 第一個參數:內容原的編碼 第二個參數:目標編碼 第三個參數:要轉的字符串 函數返回字符串 <?php $instr = ‘測試’; // GBK轉UTF-8 $outstr = iconv(‘GBK’,'UTF-8′,$instr); ?>
返回值
返回轉換後的字符串, 或者在失敗時返回 FALSE。函數
mb_convert_encoding詳解:
爲了確保轉換的成功率,咱們能夠用另外一個轉換函數
mb_convert_encoding,這個函數效率不是很高,另外這個函數還能夠省略第三個參數,自動識別內容編碼,不過最好不要用,影響效率,還須要注意的時,mb_convert_encoding和iconv參數順序不同,必定要注意。post
附兩個函數簡單的用法:測試
mb_convert_encoding
string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] ) 第一個參數:要處理的字符串 第二個參數:目標編碼 第三個參數:內容原編碼,它能夠是一個 array 也能夠是逗號分隔的枚舉列表 <?php $instr = '測試'; // GBK轉UTF-8 $outstr = mb_convert_encoding($instr,'UTF-8','GBK',); $str = mb_convert_encoding($instr, "UCS-2LE", "JIS, eucjp-win, sjis-win"); ?>
我的建議碰到轉碼問題時採用mb_convert_encoding比較保險。ui
mb_convert_variablesthis
mb_convert_variables — 轉換一個或多個變量的字符編碼編碼
mb_convert_variables ( $to_encoding , $from_encoding , &$vars [, mixed &$... ] )
將變量 vars 的編碼從 from_encoding 轉換成編碼 to_encoding。spa
mb_convert_variables() 會拼接變量數組或對象中的字符串來檢測編碼,由於短字符串的檢測每每會失敗。所以,不能在一個數組或對象中混合使用編碼。
to_encoding 將 string 轉換成這個編碼。 from_encoding 能夠指定爲一個 array 或者逗號分隔的 string,它將嘗試根據 from-coding 來檢測編碼。 當省略了 from_encoding,將使用 detect_order。 vars 是要轉換的變量的引用。 參數能夠接受 String、Array 和 Object 的類型。 mb_convert_variables() 假設全部的參數都具備一樣的編碼。 額外的 vars。
返回值 :
成功時返回轉換前的字符編碼,失敗時返回 FALSE。
實例:
<?php /* 轉換變量 $post一、$post2 編碼爲內部(internal)編碼 */ $interenc = mb_internal_encoding(); $inputenc = mb_convert_variables($interenc, "ASCII,UTF-8,SJIS-win", $post1, $post2); ?>
mb_internal_encoding
mb_internal_encoding — 設置/獲取內部字符編碼.net
mixed mb_internal_encoding ([ string $encoding = mb_internal_encoding() ] )
參數 :
encoding 字符編碼名稱使用於 HTTP 輸入字符編碼轉換、HTTP 輸出字符編碼轉換、mbstring 模塊系列函數字符編碼轉換的默認編碼。
返回值 :
若是設置了 encoding,則成功時返回 TRUE, 或者在失敗時返回 FALSE。 In this case, the character encoding for multibyte regex is NOT changed. 若是省略了 encoding,則返回當前的字符編碼名稱。
<?php /* 設置內部字符編碼爲 UTF-8 */ mb_internal_encoding("UTF-8"); /* 顯示當前的內部字符編碼*/ echo mb_internal_encoding(); ?>
mb_detect_encoding詳解:
mb_detect_encoding — 檢測字符的編碼
string mb_detect_encoding ( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false ]] )
檢測字符串 str 的編碼。
參數
str 待檢查的字符串。
encoding_list 是一個字符編碼列表。 編碼順序能夠由數組或者逗號分隔的列表字符串指定。
若是省略了 encoding_list 將會使用 detect_order。
strict strict 指定了是否嚴格地檢測編碼。 默認是 FALSE。 返回值 檢測到的字符編碼,或者沒法檢測指定字符串的編碼時返回 FALSE。
字符串編碼未知的狀況下對字符串進行編碼:
一、不管字符串編碼是什麼,均轉換爲gbk
function getSafeStr($str){ $s1 = iconv('utf-8','gbk//IGNORE',$str); $s0 = iconv('gbk','utf-8//IGNORE',$s1); if($s0 == $str){ return $s1; }else{ return $str; } }
二、不管字符串編碼是什麼,均轉換爲utf-8
function getSafeStr($str){ $s1 = iconv('gbk','utf-8//IGNORE',$str); $s0 = iconv('utf-8','gbk//IGNORE',$s1); if($s0 == $str){ return $s1; }else{ return $str; } }
獲取字符串編碼方法:
function getcode($str) { $s1 = iconv('utf-8','gbk//IGNORE',$str); $s0 = iconv('gbk','utf-8//IGNORE',$s1); if($s0 == $str){ return 'utf-8'; }else{ return 'gbk'; } }