宝马娱乐在线112222 > 网络应用 > 宝马娱乐在线:php iconv() 编码转换出错 Detected

原标题:宝马娱乐在线:php iconv() 编码转换出错 Detected

浏览次数:171 时间:2019-10-01

php教程判断页面输入字符编码方法

数原型:string iconv ( string $in_charset , string $out_宝马娱乐在线,charset , string $str )
特别是第二个参数说明:
the output charset.

<?php
function convtoutf8($str)
{
if( mb_detect_encoding($str,"utf-8, iso-8859-1, gbk")!="utf-8" )
{

return  iconv("gbk","utf-8",$str);

}
else
{
return $str;
}

}
?>

用iconv()转换一个输出字符编码不支持的字符时,如iconv('utf-8', 'gb2312', 'www.111cn.net'),会遇到这样的错误提示:

不过有朋友说,mb_detect_encoding函数不支持gbk只支持utf-8,utf-7,ascii,euc-jp,sjis,eucjp-win,sjis-win,jis,iso-2022-jp和iso-8859-*
各位可以测试,我没测试过。

notice: iconv() [function.iconv]: detected an illegal character in input string ...

<?php
/* detect character encoding with current detect_order */
echo mb_detect_encoding($str);

因为gb2312表示的是简体中文,不支持像"www.111cn.net"之类的更为复杂的汉字以及一些特殊字符,这当然会报错了,解决办法有两种:

/* "auto" is expanded according to mbstring.language */
echo mb_detect_encoding($str, "auto");

  1. 扩大输出字符编码的范围,如iconv('utf-8', 'gbk', 'www.111cn.net'),则可以正确地输出,因为gbk支持的字符范围更广;

  2. 在输出的字符编码字符串后面加上"//ignore",如iconv('utf-8', 'gb2312//ignore', 'www.111cn.net'),这样做其实是忽略了不能转换的字符,避免了出错但却不能够正确地输出(即空白不、输出)。

/* specify encoding_list character encoding by comma separated list */
echo mb_detect_encoding($str, "jis, eucjp-win, sjis-win");

下面来看看关于php教程 iconv() : detected an illegal character in input string处理方法

/* use array to specify encoding_list  */
$ary[] = "ascii";
$ary[] = "jis";
$ary[] = "euc-jp";
echo

$str = iconv('utf-8', 'gbk//ignore', unescape(isset($_get['str'])? $_get['str']:''));
本地测试//ignore能忽略掉它不认识的字接着往下转,并且不报错,而//translit是截掉它不认识的字及其后面的内容,并且报错。//ignore是我需要的。
现在等待上线看结果(这样不是好的做法,继续琢磨手册,上网搜搜看),呵呵。。。

推荐一篇文章 http://www.111cn.net/phper/php-cy/36263.htm

在网上找到下面这篇文章,发现mb_convert_encoding也可以,但效率比iconv差。

本文由宝马娱乐在线112222发布于网络应用,转载请注明出处:宝马娱乐在线:php iconv() 编码转换出错 Detected

关键词:

上一篇:php 定义常量define()与普通变量

下一篇:没有了