php中iconv函式使用方法 莫楓戀 新浪部落格

2021-10-10 12:06:21 字數 3958 閱讀 4381

windows下:

需要用到iconv函式把抓取來過的utf-8編碼的頁面轉成gb2312, 發現只有用iconv函式把抓取過來的資料一轉碼資料就會無緣無故的少一些。 讓我鬱悶了好一會兒,去網上一查資料才知道這是iconv函式的乙個bug。iconv在轉換字元"—"到gb2312時會出錯

解決方法很簡單,就是在需要轉成的編碼後加 "//ignore" 也就是iconv函式第二個引數後.如下:

以下為引用的內容:

複製** **如下:

iconv("utf-8","gb2312//ignore",$data)

ignore的意思是忽略轉換時的錯誤,如果沒有ignore引數,所有該字元後面的字串都無法被儲存。

複製** **如下:

<?php

echo $str= '你好,這裡是賣咖啡!';

echo '

';

echo iconv('gb2312', 'utf-8', $str); //將字串的編碼從gb2312轉到utf-8

echo '

';

echo iconv_substr($str, 1, 1, 'utf-8'); //按字元個數擷取而非位元組

print_r(iconv_get_encoding()); //得到當前頁面編碼資訊

echo iconv_strlen($str, 'utf-8'); //得到設定編碼的字串長度

//也有這樣用的

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

?>

iconv不是php的預設函式,也是預設安裝的模組。需要安裝才能用的。

如 果是windows2000+php,你可以修改php.ini檔案,將extension=php_iconv.dll前的";"去掉,同時你要 copy你的原php安裝檔案下的iconv.dll到你的winnt/system32下(如果你的dll指向的是這個目錄)

linux環境下:

用靜態安裝的方式,在configure時加多一項 --with-iconv就可以了,phpinfo看得到iconv的項。(linux7.3+apache4.06+php4.3.2),

安裝:#cp libiconv-1.8.tar.gz /usr/local/src

#tar zxvf lib*

#./configure --prefix=/usr/local/libiconv

#make

#make install

編譯php

#./configure --prefix=/usr/local/php4.3.2 --with-iconv=/usr/local/libiconv/

使用的簡單例子:

<?php

echo iconv("gb2312","iso-8859-1","我們");

?>

php中的mb_convert_encoding與iconv函式介紹

mb_convert_encoding這個函式是用來轉換編碼的。原來一直對程式編碼這一概念不理解,不過現在好像有點開竅了。

不過英文一般不會存在編碼問題,只有中文資料才會有這個問題。比如你用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.

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

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

例子:$content = iconv(」gbk」, 「utf-8″, $content);

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

php中使用iconv函式時容易忽略的引數

今 天在處理抓取內容的時候,當採用iconv進行編碼轉換的時候,發現結果會中斷,猜是字符集的問題,考慮怎麼跳過目標字符集不存在的字元,查手冊發現 iconv的函式只有三個引數,好像不行,然後查網上有人說可以,但是很奇怪怎麼實現,最後發現英文描述有說可以加標識到目標編碼後 面:「translit」,很鬱悶怎麼加呢?原來是先加「//」,真是鬱悶,竟然有這樣的設計

原型: $txtcontent = iconv("utf-8",'gbk',$txtcontent);

特殊引數:iconv("utf-8","gb2312//ignore",$data)

兩個可選的輔助引數:translit和ignore ,(其中ignore 就是說遇到無法轉換的就跳過)。

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 c...

php中 iconv 函式使用方法

下面windows版的iconv檔案 libiconv 1.9.1.bin.woe32.zip 將這檔案解壓,將bin 下面的charset.dll,iconv.dll,iconv.exe拷貝到c windows 或其它的系統path中 ipaddr提醒你,這步是必須的,php iconv.dll也...

iconv 的使用方法

iconv 編碼轉換 用法 iconv 選項.檔案.有如下選項可用 輸入 輸出格式規範 f,from code 原始文字編碼 t,to code 輸出編碼 資訊 l,list 列舉所有已知的字符集 輸出控制 c 從輸出中忽略無效的字元 o,output file 輸出檔案 s,silent 關閉警告...