php iconv() : Detected an illegal character in input string


Posted in PHP onDecember 05, 2010

开始是这样用的
$str = iconv('UTF-8', 'GB2312', unescape(isset($_GET['str'])? $_GET['str']:''));
上线后报一堆这样的错:iconv() : Detected an illegal character in input string

考虑到GB2312字符集比较小,换个大的吧,于是改成GBK:
$str = iconv('UTF-8', 'GBK', unescape(isset($_GET['str'])? $_GET['str']:''));
上线后还是报同样的错!

再认真读手册,发现有这么一段:
If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can't be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.
于是改成:
$str = iconv('UTF-8', 'GBK//IGNORE', unescape(isset($_GET['str'])? $_GET['str']:''));
本地测试//IGNORE能忽略掉它不认识的字接着往下转,并且不报错,而//TRANSLIT是截掉它不认识的字及其后面的内容,并且报错。//IGNORE是我需要的。
现在等待上线看结果(这样不是好的做法,继续琢磨手册,上网搜搜看),呵呵。。。

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

转换字符串编码iconv与mb_convert_encoding的区别

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] )
需要先启用 mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉

string iconv ( string in_charset, string out_charset, string str )
注意:
第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,
其中:
//TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,
//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failure.

使用:
1. 发现iconv在转换字符"-"到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个"-"都无法转换成功,无法输出。另外mb_convert_encoding没有这个bug.
2. mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;如:$str = mb_convert_encoding($str,"euc-jp","ASCII,JIS,EUC-JP,SJIS,UTF- 8");“ASCII,JIS,EUC-JP,SJIS,UTF-8”的顺序不同效果也有差异
3. 一般情况下用 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 相关文章推荐
PHP中路径问题的解决方案
Oct 09 PHP
3.从实例开始
Oct 09 PHP
简单示例AJAX结合PHP代码实现登录效果代码
Jul 25 PHP
关于php正则匹配汉字的方法介绍
Apr 25 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
Jun 29 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
php printf输出格式使用说明
Dec 05 #PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 #PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 #PHP
php 学习资料零碎东西
Dec 04 #PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 #PHP
PHP验证码类代码( 最新修改,完全定制化! )
Dec 02 #PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 #PHP
You might like
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
两种php实现图片上传的方法
2016/01/22 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
JavaScript对象模型-执行模型
2008/04/28 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
webpack常用配置项配置文件介绍
2016/11/07 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
Python 自动化表单提交实例代码
2017/06/08 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
浅谈Python基础—判断和循环
2019/03/22 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
原生python实现knn分类算法
2019/10/24 Python
python生成器用法实例详解
2019/11/22 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
关于雷锋的演讲稿
2014/05/10 职场文书
企业人事任命书
2014/06/05 职场文书
环保口号大全
2014/06/12 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书