php 編碼轉換 亂碼解決

轉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'; } }
相關文章
相關標籤/搜索