首页 php教程 php手册 php iconv() 编码转换出错 Detected an illegal character

php iconv() 编码转换出错 Detected an illegal character

May 25, 2016 pm 04:53 PM
character iconv

原型:string iconv ( string $in_charset , string $out_charset , string $str )

特别是第二个参数说明:the output charset.

用iconv()转换一个输出字符编码不支持的字符时,如iconv('utf-8', 'gb2312', 'www.phprm.com'),会遇到这样的错误提示:notice: iconv() [function.iconv]: detected an illegal character in input string ...

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

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

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

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

$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");
登录后复制


本文链接:

收藏随意^^请保留教程地址.

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

中文处理必备函数推荐:PHP iconv函数详解 中文处理必备函数推荐:PHP iconv函数详解 Jun 27, 2023 pm 02:04 PM

在进行文本处理过程中,对于不同编码格式的字符串进行转换是常见的需求。而PHP语言中提供的iconv(InternationalizationConvertion)函数可以非常方便地满足这一需求。本文将从以下几个方面详细介绍iconv函数的使用方法:iconv函数的定义和常见参数介绍实例演示:将GBK编码的字符串转换为UTF-8编码的字符串实例演示:将UTF

Java使用Character类的isLetterOrDigit()函数判断字符是否是字母或数字 Java使用Character类的isLetterOrDigit()函数判断字符是否是字母或数字 Jul 24, 2023 pm 02:45 PM

Java使用Character类的isLetterOrDigit()函数判断字符是否是字母或数字在Java编程中,我们经常需要对字符进行一些操作和判断。其中一个常见的需求是判断一个字符是否是字母或数字。Java提供了Character类的isLetterOrDigit()函数来帮助我们实现这个功能。Character类是一个包装类,用于对字符进行操作和判断。

使用java的Character.isDefined()函数判断字符是否为已定义字符 使用java的Character.isDefined()函数判断字符是否为已定义字符 Jul 25, 2023 am 10:33 AM

使用Java的Character.isDefined()函数判断字符是否为已定义字符在Java编程中,有时候需要判断一个字符是否为已定义的字符。为了方便,Java提供了Character类的isDefined()函数,可以帮助我们快速判断一个字符是否为已定义字符。本文将介绍这个函数的使用方法,并提供一些代码示例。Character类是Java中表示单个字符的

Java文档解读:Character类的isAlphabetic()方法详解 Java文档解读:Character类的isAlphabetic()方法详解 Nov 04, 2023 am 10:05 AM

Java文档解读:Character类的isAlphabetic()方法详解一、概述在Java的Character类中,isAlphabetic()方法用于判断给定字符是否是一个字母字符。它返回一个布尔值,true表示给定字符是一个字母字符,false表示给定字符不是一个字母字符。本篇文章将对这个方法的使用和原理进行详细解析,并提供代码示例帮助读者更好地理解

使用java的Character.isLetterOrDigit()函数判断字符是否为字母或数字 使用java的Character.isLetterOrDigit()函数判断字符是否为字母或数字 Jul 25, 2023 pm 04:22 PM

使用Java的Character.isLetterOrDigit()函数判断字符是否为字母或数字在Java中,我们经常需要判断一个字符是否为字母或者数字。为了简化这个过程,Java提供了一个内置函数Character.isLetterOrDigit(),可以帮助我们快速完成这个判断。Character.isLetterOrDigit()函数接受一个字符作为参

CentOS下iconv命令的介绍 CentOS下iconv命令的介绍 Dec 29, 2023 pm 07:52 PM

iconv-fencoding[-tencoding][inputfile]...[功能]对于给定文件把它的内容从一种编码转换成另一种编码。[描述]-fencoding:把字符从encoding编码开始转换。-tencoding:把字符转换到encoding编码。-l:列出已知的编码字符集合-ofile:指定输出文件-c:忽略输出的非法字符-s:禁止警告信息,但不是错误信息--verbose:显示进度信息-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。[举例]*列出当前支持的字符编码

使用java的Character.isUpperCase()函数判断字符是否为大写字母 使用java的Character.isUpperCase()函数判断字符是否为大写字母 Jul 25, 2023 pm 11:45 PM

使用java的Character.isUpperCase()函数判断字符是否为大写字母在Java编程中,有时候我们需要判断一个字符是否为大写字母。幸运的是,Java提供了一个非常方便的方法来实现这个功能,那就是使用Character类的isUpperCase()函数。本文将介绍如何使用这个函数进行判断,并通过代码示例加以说明。首先,我们需要了解一下Chara

Java文档解读:Character类的isLowerCase()方法详解 Java文档解读:Character类的isLowerCase()方法详解 Nov 03, 2023 am 10:36 AM

Java文档解读:Character类的isLowerCase()方法详解Java中的Character类提供了很多方法来处理字符的操作,其中isLowerCase()方法用于判断一个字符是否是小写字母。这个方法的具体使用以及应用场景都将在本文中进行详细解读。一、isLowerCase()方法的功能和使用方法Character类的isLowerCase()方

See all articles