Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn PHP-Iconv chinesisch verstümmelt ist?

Was tun, wenn PHP-Iconv chinesisch verstümmelt ist?

藏色散人
藏色散人Original
2020-08-29 10:09:034556Durchsuche

Lösung für verstümmelte chinesische Zeichen in PHP Iconv: Laden Sie zuerst die libiconv-Funktionsbibliothek herunter und installieren Sie libiconv. Fügen Sie dann nach der zu konvertierenden Codierung den Parameter „//IGNORE“ hinzu.

Was tun, wenn PHP-Iconv chinesisch verstümmelt ist?

Empfohlen: „PHP-Video-Tutorial

So verwenden Sie die Iconv-Funktion in PHP, um verstümmelte chinesische Zeichen zu lösen

Die Iconv-Funktionsbibliothek kann die Konvertierung zwischen verschiedenen Zeichensätzen abschließen und ist unverzichtbar in Grundlegende Funktionsbibliothek für die PHP-Programmierung.

1. Laden Sie die libiconv-Funktionsbibliothek libiconv-1.x.tar.gz herunter.

2. Installieren Sie libiconv

#configure --prefix=/usr/local/iconv 
#make 
#make install

Fügt den Kompilierungsparameter --with-iconv=/usr/local/iconv hinzu

Unter Windows

Die Funktion „iconv“ konvertiert die erfasste utf-8-codierte Seite in gb2312. Verwenden Sie nur die Funktion „iconv“, um sie zu erfassen. Sobald die Daten transkodiert sind, Die Daten werden ohne Grund geringer sein.

Dies ist ein Fehler in der Iconv-Funktion. iconv macht beim Konvertieren des Zeichens „-“ in gb2312 einen Fehler. Die Lösung ist sehr einfach: Fügen Sie „//IGNORE“ nach der zu konvertierenden Codierung hinzu, dh nach dem zweiten Parameter der iconv-Funktion . Wie folgt:

Folgendes wird in Anführungszeichen gesetzt:

iconv("UTF-8","GB2312//IGNORE",$data)

ignore bedeutet, Fehler während der Konvertierung zu ignorieren. Alle Zeichenfolgen, die auf dieses Zeichen folgen, können nicht gespeichert werden.

iconv ist nicht die Standardfunktion von PHP, sondern auch ein standardmäßig installiertes Modul. Es muss installiert werden, bevor es verwendet werden kann.

Wenn es Windows2000+php ist, können Sie die php.ini-Datei ändern und das „;“ vor der Erweiterung=php_iconv.dll entfernen. Gleichzeitig müssen Sie die iconv.dll in Ihre ursprüngliche PHP-Installationsdatei kopieren Ihr winnt/system32 Weiter (wenn Ihre DLL auf dieses Verzeichnis verweist)

Verwenden Sie in der Linux-Umgebung

die statische Installation und fügen Sie ein zusätzliches Element hinzu --with-iconv, wenn phpinfo das Element iconv sieht. Einfaches Anwendungsbeispiel:

$zip = new ZipArchive();//打开文件 如果文件已经存在则覆盖,如果没有则创建  
if($zip->open($destination,$overwrite?ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE)!==true){
  return false;
 }
//向压缩文件add the files  
foreach($valid_files as $file){
     //$zip->addFile($file,$file);
     $file_info_arr= pathinfo($file);
     $filename =$file_info_arr['basename'];
     $filesss = iconv('UTF-8', 'GBK//IGNORE', $filename);
     $zip->addFile($file,$filesss);
}

Einführung in die Funktionen mb_convert_encoding und iconv in PHP

mb_convert_encoding Diese Funktion wird zum Konvertieren von Kodierungen verwendet. Früher habe ich das Konzept der Programmcodierung nicht verstanden, aber jetzt scheine ich es ein wenig zu verstehen.

Bei Englisch gibt es jedoch im Allgemeinen keine Kodierungsprobleme, nur bei chinesischen Daten tritt dieses Problem auf. Wenn Sie beispielsweise Zend Studio oder Editplus zum Schreiben eines Programms verwenden, verwenden Sie die GBK-Codierung. Wenn die Daten in die Datenbank eingegeben werden müssen und die Datenbankcodierung utf8 ist, müssen die Daten codiert und konvertiert werden, andernfalls wird dies der Fall sein werden beim Betreten der Datenbank verstümmelt.

Sehen Sie sich die offizielle Verwendung von mb_convert_encoding an:

http://cn.php.net/manual/zh/function.mb-convert-encoding.php

Um die oben genannte Funktion verwenden zu können, müssen Sie sie jedoch installieren Sie müssen zuerst die MBstring-Erweiterungsbibliothek aktivieren.

Eine weitere Funktion iconv in PHP wird ebenfalls zum Konvertieren der String-Kodierung verwendet und ihre Funktion ähnelt der obigen Funktion.

Im Folgenden finden Sie einige detaillierte Beispiele:

iconv – Zeichenfolge in angeforderte Zeichenkodierung konvertieren

(PHP 4 >= 4.0.5, PHP 5)

mb_convert_encoding – Zeichenkodierung konvertieren

(PHP 4 >= 4.0 .6, PHP 5)

Verwendung:

string mb_convert_encoding ( string str, string to_encoding [, gemischt from_encoding] )

Sie müssen zuerst die mbstring-Erweiterungsbibliothek aktivieren und in php.ini hinzufügen; extension=php_mbstring.dll vor ; Entfernen Sie

mb_convert_encoding, um mehrere Eingabecodierungen anzugeben, die automatisch anhand des Inhalts identifiziert werden, aber die Ausführungseffizienz ist viel schlechter als bei iconv; : Der zweite Parameter. Zusätzlich zur Angabe der Kodierung, in die konvertiert werden soll, können Sie auch zwei Suffixe hinzufügen: //TRANSLIT und //IGNORE, wobei //TRANSLIT Zeichen, die nicht direkt konvertiert werden können, automatisch in ein oder mehrere ungefähre Zeichen umwandelt , // IGNORE ignoriert Zeichen, die nicht konvertiert werden können, und der Standardeffekt besteht darin, ab dem ersten unzulässigen Zeichen abzuschneiden.

Gibt bei einem Fehler die konvertierte Zeichenfolge oder FALSE zurück.

Verwendung: Es wurde festgestellt, dass iconv beim Konvertieren des Zeichens „-“ in gb2312 einen Fehler macht. Ohne den Ignorierparameter können nicht alle auf dieses Zeichen folgenden Zeichenfolgen gespeichert werden. Egal was passiert, dieses „-“ kann nicht erfolgreich konvertiert und nicht ausgegeben werden. Darüber hinaus weist mb_convert_encoding diesen Fehler nicht auf.

Verwenden Sie die Funktion mb_convert_encoding nur, wenn Sie die ursprüngliche Codierung nicht ermitteln können oder die Iconv-Konvertierung nicht normal angezeigt werden kann.

Ein kleines Beispiel für die Verwendung von mb_convert_encoding zum Transkodieren in PHP-Falle:

Jeder ist mit der Verwendung der Methode mb_convert_encoding() zum Konvertieren der Zeichenkodierung in PHP-Programmen vertraut und wird auch in großen Mengen verwendet. Und im Allgemeinen funktioniert diese Methode recht gut und verdient Lob. Aber in einem Projekt mussten wir es verwenden, um UTF8 in GBK zu konvertieren, und stellten ein kleines Problem bei der Konvertierung einiger Sonderzeichen fest. Die spezifische Leistung besteht darin, dass MB Zeichen konvertiert, die in utf8, aber nicht in gbk codiert werden können.

Wenn wir während des Konvertierungsprozesses der Zeichencodierung auf Zeichen stoßen, die nicht durch die Zielcodierung dargestellt werden können, sollte das Transcodierungsprogramm diese Zeichen verwerfen. Auf diese Weise gehen zwar einige Daten verloren, dies wird jedoch nicht verursacht Die Konvertierung Die Zeichenfolge des Codes ist nicht verfügbar. Es ist nicht klar, warum MB die obige Methode verwenden sollte, anstatt sie zu verwerfen.

Die vorübergehende Lösung besteht darin, die transkodierte Zeichenfolgensequenz zu filtern, um alle x0080-Zeichen herauszufiltern, oder die utf8-Zeichenfolge vor dem Escapen zu filtern, um alle Zeichen herauszufiltern, die durch ut8 dargestellt werden können, aber nicht durch gbk-Zeichen dargestellt werden können Die erste Filtermethode ist relativ einfach zu implementieren.

Das obige ist der detaillierte Inhalt vonWas tun, wenn PHP-Iconv chinesisch verstümmelt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn