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 . "//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中解决中英文混合输出乱码问题必备的万能工具,值得我们认真学习和掌握。