Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das verstümmelte Problem der PHP-Abfrage

So lösen Sie das verstümmelte Problem der PHP-Abfrage

藏色散人
藏色散人Original
2020-11-19 09:52:551991Durchsuche

Lösung für eine verstümmelte PHP-Abfrage: Fügen Sie zuerst „charset=utf-8“ zur PHP-Seite hinzu und fügen Sie dann die Anweisung „mysql_query(“set name’utf8‘“);“ hinzu.

So lösen Sie das verstümmelte Problem der PHP-Abfrage

Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 5.6. Diese Methode ist für alle Computermarken geeignet.

Empfohlen: „PHP-Video-Tutorial

Lösung für die chinesische Anzeige verstümmelter Abfrageergebnisse beim Herstellen einer Verbindung zu MySQL über PHP

Wir gehen zunächst davon aus, dass die in der Datenbank verwendete Codierung UTF-8 ist

An dieser Stelle Dies sollten wir jedoch zuerst auf der PHP-Seite tun. Fügen Sie den

Code wie folgt hinzu:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Der Wert des Zeichensatzes utf-8 muss hier mit dem Codierungstyp beim Speichern der Datei identisch sein

Dann fügen Sie den

Code hinzu wie folgt vor der Datenbankabfrage:

mysql_query("set names &#39;utf8&#39;");

Der Codierungswert dieser Anweisungszeile sollte ebenfalls derselbe sein wie der oben codierte Wert.

Kurz gesagt, der auf der Webseite gespeicherte Codierungstyp, der Zeichensatz = utf-8 der Webseite und die Codierungsmethode der ausgeführten utf8-Anweisung für festgelegte Namen sollten konsistent sein

Das Folgende ist eine gute Analyse

MySQL „SET NAMES x“-Zeichensatz Problemanalyse

Kürzlich von BBT geschult, um ein Abstimmungssystem aufzubauen. Der Systemcode war nicht schwierig, aber ich habe meine Zeit hauptsächlich damit verbracht, Zeichensätze und Kodierungen zu studieren. Die Kodierungsprobleme (Zeichensatzprobleme) der beiden Systeme MySQL und Apache haben mir den Kopf zerbrochen und sehr gelitten. Die Lösungen für diese Probleme im Internet sind verstreut und einseitig. Die meisten von ihnen bieten Lösungen, ohne zu erklären, warum. Deshalb werde ich zusammenfassen, was ich in den letzten Tagen gewonnen habe, um zu vermeiden, dass Nachzügler erneut Umwege gehen. Dieser Artikel ist ein wenig hilfreich für das PHP-Schreiben (nachdem Sie ihn gelesen haben, wissen Sie, wie Sie dafür sorgen, dass Ihr PHP-Programm auf den Servern der meisten Space-Anbieter normal angezeigt wird), aber mehr Hilfe liegt in der Einrichtung und den Einstellungen des Netzwerkservers.

Lassen Sie uns zunächst über den Zeichensatz von MySQL sprechen. Unter Windows können Sie den Standardzeichensatz der Datenbank ändern, indem Sie die beiden Felder

1.# CLIENT SECTION
2.[mysql]
3.default-character-set=utf8
4.# SERVER SECTION
5.[mysqld]
6.default-character-set=utf8

in my.ini ändern. Der erste ist der Standardzeichensatz des Clients und der zweite ist der Standardzeichensatz des Servers. Angenommen, wir setzen beide auf utf8 und geben dann „show variebles like „character_set_%“;“ in den MySQL-Befehlszeilenclient ein. Sie können die folgenden Zeichen sehen:

character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_results latin1
character_set_server utf8
character_set_system utf8

Das utf8 ändert sich mit unseren obigen Einstellungen. Wenn wir derzeit Daten aus der Datenbank über ein PHP-Programm mit UTF-8 lesen, handelt es sich wahrscheinlich um eine Zeichenfolge mit „?????“ oder anderen verstümmelten Zeichen. Nach einer langen Online-Suche ist die Lösung einfach. Nachdem Sie eine Verbindung zur Datenbank hergestellt haben, führen Sie vor dem Lesen der Daten zunächst eine Abfrage „SET NAMES UTF8“ aus, die in PHP

1.mysql_query("SET NAMES UTF8");

ist, und sie wird normal angezeigt (so lange). wie die Zeichen in den Informationen in der Datenbank normal sind). Warum passiert das? Was genau macht die Abfrage „SET NAMES UTF8“?

Gehen Sie zur MySQL-Befehlszeile und geben Sie „SET NAMES UTF8;“ ein, führen Sie dann „show variebles like „character_set_%“;“ aus und stellen Sie fest, dass die Werte der Variablen „character_set_client“, „character_set_connection“ und „character_set_results“ angezeigt werden. die ursprünglich latin1 waren, alle in utf8 geändert wurden, stellt sich heraus, dass diese drei Variablen Probleme verursachen. Schauen Sie im Handbuch nach, der obige Satz entspricht:

1.SET character_set_client = utf8;
2.SET character_set_results = utf8;
3.SET character_set_connection = utf8;

Sehen Sie sich die Funktionen dieser drei Variablen an:

Informationseingabepfad: Client→Verbindung→Server;

Informationsausgabepfad: Server→Verbindung→Ergebnisse.

Mit anderen Worten: Jeder Pfad muss die Zeichensatzkodierung dreimal ändern. Nehmen Sie als Beispiel die verstümmelte Ausgabe. Für die utf8-Daten auf dem Server wird die eingehende Verbindung in latin1 konvertiert, die eingehenden Ergebnisse werden in latin1 konvertiert und die utf-8-Seite konvertiert die Ergebnisse erneut. Wenn die beiden Zeichensätze nicht kompatibel sind, z. B. latin1 und utf8, ist der Konvertierungsprozess irreversibel und destruktiv. Es kann also nicht mehr zurückgedreht werden.

Hier muss jedoch darauf hingewiesen werden, dass die Wirkung von „SET NAMES UTF8“ nur vorübergehend ist und MySQL nach dem Neustart auf die Standardeinstellungen zurückgesetzt wird.

Der nächste Schritt besteht darin, über die Konfiguration von MySQL auf dem Server zu sprechen. Müssen wir nicht jedes Mal, wenn wir in die Datenbank lesen und schreiben, „SET NAMES UTF8“ hinzufügen, um sicherzustellen, dass die Codierung der Datenübertragung konsistent ist? Kann ich MySQL so konfigurieren, dass die drei Variablen standardmäßig den gewünschten Zeichensatz verwenden? Im Handbuch steht es nicht, und ich konnte die Antwort online nicht finden. Daher gibt es aus Sicht der Serverkonfiguration keine Möglichkeit, diese Codezeile wegzulassen.

Das obige ist der detaillierte Inhalt vonSo lösen Sie das verstümmelte Problem der PHP-Abfrage. 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