PHP網站開發中,中英文混合輸出十分常見。在輸出時如果不做處理,往往會出現亂碼情況。PHP提供了iconv()函數用于解決這一問題,下面將詳細介紹該函數的用法和示例。
iconv()函數的基本用法如下:
string iconv(string $in_charset, string $out_charset, string $str);
其中$in_charset表示輸入字符串的字符集,$out_charset表示輸出字符串的字符集,$str為要進行轉換的字符串。如果成功轉換,則返回轉換后的字符串,否則返回false。
下面舉例說明:
$str = "Hello, 世界!"; $str = iconv("UTF-8", "GB2312", $str); echo $str;
輸出為:
Hello, ??!
以上示例中,$str的初始字符集為UTF-8,我們通過iconv()函數將其轉換為GB2312字符集。由于GB2312不支持中文之外的字符,所以會出現問號代替這些字符。
如果輸出字符集和輸入字符集相同,則不進行轉換,直接返回原字符串:
$str = "Hello, 世界!"; $str = iconv("UTF-8", "UTF-8", $str); echo $str;
輸出為:
Hello, 世界!
如果要將字符串轉換為多種字符集的格式,可以用循環來進行轉換:
$str = "Hello, 世界!"; $charsets = array('UTF-8', 'GB2312', 'GBK', 'ISO-8859-1'); foreach ($charsets as $charset) { $str_tmp = iconv("UTF-8", $charset . "http://IGNORE", $str); echo sprintf("%s =>%s : %s\n", "UTF-8", $charset, $str_tmp); }
輸出為:
UTF-8 =>UTF-8 : Hello, 世界! UTF-8 =>GB2312 : Hello, ?! UTF-8 =>GBK : Hello, ?! UTF-8 =>ISO-8859-1 : Hello, ???!
以上示例中,我們將$str轉換為四種不同的字符集格式,其中GB2312和GBK不支持中文之外的字符,所以出現了問號代替。ISO-8859-1只支持拉丁語系的字符,所以完全亂碼了。
如果要查看當前系統支持的所有字符集,可以使用iconv_get_encoding()函數:
$charsets = array('input_encoding', 'output_encoding', 'internal_encoding'); foreach ($charsets as $type) { $str_tmp = iconv_get_encoding($type); echo sprintf("%s =>%s\n", $type, $str_tmp); }
輸出為:
input_encoding =>ISO-8859-1 output_encoding =>ISO-8859-1 internal_encoding =>ISO-8859-1
以上示例中,我們打印了當前系統的三種字符集:輸入字符集、輸出字符集和內部字符集,都是ISO-8859-1。
除了上述用法,iconv()函數還有一些高級用法,比如將不支持中文的字符集合并到已有的字符集中進行轉換,或者自定義一些字符映射表等等,這些用法超出本文范疇,讀者可以自行在PHP手冊或者其他網絡資源中查找相關文檔。
總之,iconv()函數是PHP中解決中英文混合輸出亂碼問題必備的萬能工具,值得我們認真學習和掌握。