Maison 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处理方法:

1

$str = iconv('utf-8', 'gbk//ignore', unescape(isset($_get['str'])? $_get['str']:''));

Copier après la connexion

本地测试//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.

1

2

$str = mb_convert_encoding($str, "ucs-2le", "jis, eucjp-win, sjis-win");

$str = mb_convert_encoding($str, "euc-jp', "auto");

Copier après la connexion


本文链接:

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Fonctions essentielles recommandées pour le traitement chinois : explication détaillée de la fonction PHP iconv Fonctions essentielles recommandées pour le traitement chinois : explication détaillée de la fonction PHP iconv Jun 27, 2023 pm 02:04 PM

Fonctions essentielles recommandées pour le traitement chinois : explication détaillée de la fonction PHP iconv

Java utilise la fonction isLetterOrDigit() de la classe Character pour déterminer si un caractère est une lettre ou un chiffre. Java utilise la fonction isLetterOrDigit() de la classe Character pour déterminer si un caractère est une lettre ou un chiffre. Jul 24, 2023 pm 02:45 PM

Java utilise la fonction isLetterOrDigit() de la classe Character pour déterminer si un caractère est une lettre ou un chiffre.

Interprétation de la documentation Java : explication détaillée de la méthode isAlphabetic() de la classe Character Interprétation de la documentation Java : explication détaillée de la méthode isAlphabetic() de la classe Character Nov 04, 2023 am 10:05 AM

Interprétation de la documentation Java : explication détaillée de la méthode isAlphabetic() de la classe Character

Utilisez la fonction Character.isDefined() de Java pour déterminer si un caractère est un caractère défini Utilisez la fonction Character.isDefined() de Java pour déterminer si un caractère est un caractère défini Jul 25, 2023 am 10:33 AM

Utilisez la fonction Character.isDefined() de Java pour déterminer si un caractère est un caractère défini

Utilisez la fonction Character.isLetterOrDigit() de Java pour déterminer si un caractère est une lettre ou un chiffre. Utilisez la fonction Character.isLetterOrDigit() de Java pour déterminer si un caractère est une lettre ou un chiffre. Jul 25, 2023 pm 04:22 PM

Utilisez la fonction Character.isLetterOrDigit() de Java pour déterminer si un caractère est une lettre ou un chiffre.

Introduction à la commande iconv sous CentOS Introduction à la commande iconv sous CentOS Dec 29, 2023 pm 07:52 PM

Introduction à la commande iconv sous CentOS

Utilisez la fonction Character.isUpperCase() de Java pour déterminer si un caractère est une lettre majuscule Utilisez la fonction Character.isUpperCase() de Java pour déterminer si un caractère est une lettre majuscule Jul 25, 2023 pm 11:45 PM

Utilisez la fonction Character.isUpperCase() de Java pour déterminer si un caractère est une lettre majuscule

Interprétation de la documentation Java : explication détaillée de la méthode isLowerCase() de la classe Character Interprétation de la documentation Java : explication détaillée de la méthode isLowerCase() de la classe Character Nov 03, 2023 am 10:36 AM

Interprétation de la documentation Java : explication détaillée de la méthode isLowerCase() de la classe Character

See all articles