php編碼轉換函式

2021-07-16 01:28:25 字數 2744 閱讀 5760

不過英文一般不會存在編碼問題,只有中文資料才會有這個問題。比如你用zend studio或editplus寫程式時,用的是gbk編碼,如果資料需要入資料庫,而資料庫的編碼為utf8時,這時就要把資料進行編碼轉換,不然進到資料庫就會變成亂碼。

mb_convert_encoding的用法見官方:

做乙個gbk to utf-8

複製**

**如下:

<?php

header("content-type: text/html; charset=utf-8");

echo mb_convert_encoding("妳系我的友仔", "utf-8", "gbk");

?>

再來個gb2312 to big5

複製**

**如下:

<?php

header("content-type: text/html; charset=big5");

echo mb_convert_encoding("你是我的朋友", "big5", "gb2312");

?>

不過要使用上面的函式需要安裝但是需要先enable mbstring 擴充套件庫。

php中的另外乙個函式iconv也是用來轉換字串編碼的,與上函式功能相似。

下面還有一些詳細的例子:

iconv — convert string to requested character encoding

(php 4 >= 4.0.5, php 5)

mb_convert_encoding — convert character encoding

(php 4 >= 4.0.6, php 5)

用法:

string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )

需要先enable mbstring 擴充套件庫,在 php.ini裡將; extension=php_mbstring.dll 前面的 ; 去掉

mb_convert_encoding 可以指定多種輸入編碼,它會根據內容自動識別,但是執行效率比iconv差太多;

string iconv ( string in_charset, string out_charset, string str )

注意:第二個引數,除了可以指定要轉化到的編碼以外,還可以增加兩個字尾://translit 和 //ignore,其中 //translit 會自動將不能直接轉化的字元變成乙個或多個近似的字元,//ignore 會忽略掉不能轉化的字元,而預設效果是從第乙個非法字元截斷。

returns the converted string or false on failure.

使用:

發現iconv在轉換字元」—」到gb2312時會出錯,如果沒有ignore引數,所有該字元後面的字串都無法被儲存。不管怎麼樣,這個」—」都無法轉換成功,無法輸出。 另外mb_convert_encoding沒有這個bug.

一般情況下用 iconv,只有當遇到無法確定原編碼是何種編碼,或者iconv轉化後無法正常顯示時才用mb_convert_encoding 函式.

from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. if it is not specified, the internal encoding will be used.

/* auto detect encoding from jis, eucjp-win, sjis-win, then convert str to ucs-2le */

$str = mb_convert_encoding($str, 「ucs-2le」, 「jis, eucjp-win, sjis-win」);

/* 「auto」 is expanded to 「ascii,jis,utf-8,euc-jp,sjis」 */

$str = mb_convert_encoding($str, 「euc-jp」, 「auto」);

例子:

複製**

**如下:

$content = iconv("gbk", "utf-8", $content);

$content = mb_convert_encoding($content, "utf-8","gbk");

php中使用mb_convert_encoding轉碼的小陷阱

在php程式中使用mb_convert_encoding()方法進行字元編碼轉換大家都很熟悉了,平時也在大量的使用。而且在一般情況下該方法也表現的足夠好,值得表揚。但在乙個專案中我們需要使用它進行utf8到gbk的轉換,在轉換一些特殊字元時發現了乙個不大不小的問題。具體表現為mb把在utf8可編碼的字元而在gbk中不可編碼的字元都轉成了\0x00\0x80,這樣就導致轉換後的gbk字元是有問題的。

在我們的意識中,在進行字元編碼轉換的過程中,如果遇到目標編碼不可表現的字元,轉碼程式應該做的是捨棄這種字元,這樣雖然丟失了部分資料,但不會導致轉碼的字串行不可用。不清楚mb為什麼要使用上述方式而不是捨棄方式。

臨時的解決方式是對轉碼後的字串序列進行過濾,過濾掉所有\x00\80的字元;又或者在轉義之前對utf8的字串進行過濾,過濾掉ut8可表示而gbk不可表示的所有字元,從實現難度上來講,第一種過濾方式比較容易做到。  

PHP編碼轉換函式

gb2312轉換成utf 8 utf iconv gb2312 utf 8 request keyword 將字串utf 8碼轉換為gb2312碼 str iconv utf 8 gb2312 translit str iconv 函式definition and usage 定義和用法 iconv...

PHP編碼轉換函式

gb2312轉換成utf 8 utf iconv gb2312 utf 8 request keyword 將字串utf 8碼轉換為gb2312碼 str iconv utf 8 gb2312 translit str iconv 函式definition and usage 定義和用法 iconv...

PHP編碼轉換函式應用

最近寫了幾個小程式,其中遇到了很多字元編碼的問題,在這裡總結一下 資料庫的編碼一般在建立資料庫時設定 整理 當然建立表時也需要設定的,而且只要有中文漢字 標點都需要設定的,一般有gbk 和gb2312一樣,雙位元組編碼,但比gb2312字元更多 utf 8 國際通用編碼,三位元組編碼形式 我寫程式都...