Heim > Artikel > Backend-Entwicklung > Warum werden auf der PHP-Seite verstümmelte HTML-Zeichen angezeigt?
Warum werden auf der PHP-Seite verstümmelte HTML-Zeichen angezeigt?
1. PHP-Webseiten-Kodierungsfehler; Wenn Sie die GB2312-Codierung verwenden möchten, sollte PHP den Header ausgeben: header("Content-Type: text/html; charset=gb2312"), ihn zur statischen Seite hinzufügen und das Codierungsformat aller Dateien angeben ANSI. Sie können es mit Notepad öffnen und als ausgewählte Kodierung speichern. Für ANSI überschreiben Sie die Quelldatei.
Wenn Sie die UTF-8-Kodierung verwenden möchten, sollte PHP den Header ausgeben: header("Content-Type: text/html; charset=utf-8"), eine statische Seite und die Kodierung hinzufügen Das Format aller Dateien ist utf-8. Das Speichern als utf-8 kann etwas mühsam sein. Wenn Sie Sitzung verwenden, können Sie Editplus zum Speichern verwenden. Parameterauswahl->Datei-> UTF-8-Signatur, wählen Sie Immer löschen und speichern Sie dann, um die Stücklisteninformationen zu entfernen.
php selbst ist kein Unicode, alle Funktionen wie substr müssen in mb_substr geändert werden (mbstring-Erweiterung muss installiert werden); oder verwenden Sie iconv zum Transkodieren.
2. Die MySQL-Kodierung stimmt nicht mit der PHP-Kodierung überein.Lösung:
Ändern Sie die MySQL-Konfigurationsdatei my.ini oder my.cnf ist die beste Einfach zu verwendende UTF8-Kodierung [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 default-storage-engine=MyISAM Unter [mysqld] hinzufügen: default-collation=utf8_bin init_connect='SET NAMES utf8'
Fügen Sie mysql_query("set name's 'encoding'"); vor dem PHP-Programm hinzu, das Datenbankoperationen ausführen muss. Wenn die PHP-Kodierung gb2312 ist MySQL-Kodierung ist gb2312. Wenn es utf-8 ist, dann ist die MySQL-Kodierung utf8, sodass beim Einfügen oder Abrufen von Daten keine verstümmelten Zeichen auftreten
3. Die Kodierung von PHP und dem Betriebssystem sind inkonsistent.
Die Kodierung von Windows und Linux ist unterschiedlich. Wenn in einer Windows-Umgebung PHP-Funktionen aufgerufen werden und die Parameter utf-8-kodiert sind, treten Fehler auf, z B. move_uploaded_file(), filesize(), readfile() usw. Diese Funktionen werden häufig beim Verarbeiten von Uploads und Downloads verwendet. Beim Aufruf kann der folgende Fehler auftreten:
Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ... Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ... Warning: filesize() [function.filesize]: stat failed for ... in ... Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..
Obwohl die gb2312-Codierung in einer Linux-Umgebung verwendet wird, treten diese Fehler auf tritt nicht auf, aber der gespeicherte Dateiname wird verstümmelt und die Datei kann nicht gelesen werden. In diesem Fall können Sie die Parameter zunächst in die vom Betriebssystem erkannte Kodierung konvertieren. Zur Kodierungskonvertierung können Sie mb_convert_encoding (string, new) verwenden Kodierung, Originalkodierung) oder iconv (Originalkodierung, neue Kodierung, Zeichenfolge), damit der nach der Verarbeitung gespeicherte Dateiname nicht verstümmelt wird und die Datei normal gelesen werden kann, um das Hoch- und Herunterladen von Dateien mit chinesischen Namen zu erreichen.
Tatsächlich gibt es eine bessere Lösung, die vollständig vom System getrennt ist und keine Notwendigkeit besteht, die Codierung des Systems zu berücksichtigen. Sie können als Dateinamen nur eine Folge von Buchstaben und Zahlen generieren und den ursprünglichen Namen mit chinesischen Zeichen in der Datenbank speichern. Auf diese Weise gibt es beim Aufruf von move_uploaded_file() keine Probleme, Sie müssen nur Änderungen vornehmen den Dateinamen mit chinesischen Schriftzeichen auf den Originalnamen umstellen. Der Code zum Implementieren des Herunterladens lautet wie folgt:
header("Pragma: public"); header("Expires: 0"); header("Cache-Component: must-revalidate, post-check=0, pre-check=0"); header("Content-type: $file_type"); header("Content-Length: $file_size"); header("Content-Disposition: attachment; filename=\"$file_name\""); header("Content-Transfer-Encoding: binary"); readfile($file_path);
Das obige ist der detaillierte Inhalt vonWarum werden auf der PHP-Seite verstümmelte HTML-Zeichen angezeigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!