php iconv() 编码转换出错 Detected an illegal character
原型: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");
本文链接:
收藏随意^^请保留教程地址.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Bei der Textverarbeitung ist es häufig erforderlich, Zeichenfolgen in verschiedene Kodierungsformate zu konvertieren. Die in der PHP-Sprache bereitgestellte Funktion iconv (InternationalizationConversion) kann diesen Bedarf sehr bequem erfüllen. In diesem Artikel wird die Verwendung der Funktion „iconv“ im Detail unter folgenden Aspekten vorgestellt: Definition der Funktion „iconv“ und Einführung in allgemeine Parameter. Beispieldemonstration: GBK-codierte Zeichenfolge in UTF-8-codierte Zeichenfolge konvertieren. Beispieldemonstration: UTF konvertieren

Java verwendet die Funktion isLetterOrDigit() der Character-Klasse, um zu bestimmen, ob ein Zeichen ein Buchstabe oder eine Zahl ist. Bei der Java-Programmierung müssen wir häufig einige Operationen und Beurteilungen an Zeichen durchführen. Eine der häufigsten Anforderungen besteht darin, festzustellen, ob ein Zeichen ein Buchstabe oder eine Zahl ist. Java stellt die Funktion isLetterOrDigit() der Character-Klasse bereit, um uns bei der Implementierung dieser Funktion zu helfen. Die Character-Klasse ist eine Wrapper-Klasse, die zum Bedienen und Beurteilen von Charakteren verwendet wird.

Verwenden Sie die Funktion Character.isDefined() von Java, um festzustellen, ob ein Zeichen ein definiertes Zeichen ist. Bei der Java-Programmierung müssen Sie manchmal feststellen, ob ein Zeichen ein definiertes Zeichen ist. Der Einfachheit halber stellt Java die Funktion isDefined() der Character-Klasse bereit, mit deren Hilfe wir schnell feststellen können, ob ein Zeichen ein definiertes Zeichen ist. In diesem Artikel wird die Verwendung dieser Funktion erläutert und einige Codebeispiele bereitgestellt. Die Zeichenklasse repräsentiert ein einzelnes Zeichen in Java

Interpretation der Java-Dokumentation: Detaillierte Erläuterung der Methode isAlphabetic() der Klasse Character 1. Übersicht In der Klasse Java Character wird die Methode isAlphabetic() verwendet, um zu bestimmen, ob ein bestimmtes Zeichen ein alphabetisches Zeichen ist. Es wird ein boolescher Wert zurückgegeben, wobei „true“ angibt, dass das angegebene Zeichen ein alphabetisches Zeichen ist, und „false“ angibt, dass das angegebene Zeichen kein alphabetisches Zeichen ist. Dieser Artikel bietet eine detaillierte Analyse der Verwendung und des Prinzips dieser Methode und stellt Codebeispiele bereit, um den Lesern ein besseres Verständnis zu erleichtern

Verwenden Sie die Funktion Character.isLetterOrDigit() von Java, um zu bestimmen, ob ein Zeichen ein Buchstabe oder eine Zahl ist. In Java müssen wir häufig feststellen, ob ein Zeichen ein Buchstabe oder eine Zahl ist. Um diesen Prozess zu vereinfachen, bietet Java eine integrierte Funktion Character.isLetterOrDigit(), die uns helfen kann, dieses Urteil schnell zu vervollständigen. Die Funktion Character.isLetterOrDigit() akzeptiert ein Zeichen als Parameter

iconv-fencoding[-tencoding][Eingabedatei]...[Funktion] Konvertiert den Inhalt einer bestimmten Datei von einer Kodierung in eine andere. [Beschreibung]-fencoding: Konvertieren Sie Zeichen von Codierung in Codierung. -tencoding: Zeichen in Kodierung umwandeln. -l: Den bekannten Satz codierter Zeichen auflisten -ofile: Ausgabedatei angeben -c: Unzulässige Zeichen in der Ausgabe ignorieren -s: Warnmeldungen, aber keine Fehlermeldungen unterdrücken --verbose: Fortschrittsinformationen anzeigen -f und -t können Die angegebenen zulässigen Zeichen werden im Befehl mit der Option -l aufgelistet. [Beispiel]* Derzeit unterstützte Zeichenkodierungen auflisten

Verwenden Sie die Funktion Character.isUpperCase() von Java, um festzustellen, ob ein Zeichen ein Großbuchstabe ist. In der Java-Programmierung müssen wir manchmal feststellen, ob ein Zeichen ein Großbuchstabe ist. Glücklicherweise bietet Java eine sehr praktische Möglichkeit, diese Funktion zu erreichen, nämlich die Funktion isUpperCase() der Character-Klasse zu verwenden. In diesem Artikel wird erläutert, wie Sie mit dieser Funktion Urteile fällen und dies anhand von Codebeispielen veranschaulichen. Zuerst müssen wir Chara verstehen

Interpretation der Java-Dokumentation: Detaillierte Erläuterung der Methode isLowerCase() der Klasse Character. Die Klasse Character in Java bietet viele Methoden zur Verarbeitung von Zeichenoperationen. Die Methode isLowerCase() wird verwendet, um zu bestimmen, ob ein Zeichen ein Kleinbuchstabe ist. Der konkrete Einsatz und die Anwendungsszenarien dieser Methode werden in diesem Artikel ausführlich erläutert. 1. Funktion und Verwendung der Methode isLowerCase() Die Methode isLowerCase() der Klasse Character
