Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem mit verstümmelten PHP-Anfragen

So lösen Sie das Problem mit verstümmelten PHP-Anfragen

藏色散人
藏色散人Original
2020-10-20 09:39:402199Durchsuche

Lösung für verstümmelte PHP-Anfragen: Öffnen Sie zuerst die server.xml von Tomcat und legen Sie dann das Attribut des Elements „URIEncoding="UTF-8" fest.

So lösen Sie das Problem mit verstümmelten PHP-Anfragen

Empfohlen: „PHP-Video-Tutorial

Anfrage, Antwort: Probleme und Lösungen mit chinesischem verstümmeltem Code

Anfrage mit verstümmeltem Code bezieht sich auf: Die vom Browser an den Server gesendeten Anforderungsparameter enthalten chinesische Zeichen. Der vom Server erhaltene Wert des Anforderungsparameters ist verstümmelt.

Antwort verstümmelt bezieht sich auf: Die vom Server an den Browser gesendeten Daten enthalten verstümmelte Zeichen und der Browser zeigt verstümmelte Zeichen an. Unabhängig davon, ob die Anforderung verstümmelt ist Oder die Antwort verstümmelt ist, was tatsächlich durch die inkonsistenten Codierungsformate verursacht wird, die vom Client (Browser) und dem Server verwendet werden. Nehmen Sie als Beispiel die verstümmelte Anfrage: Der Browser sendet eine Anfrage an den Server. Da die Kommunikation zwischen dem Browser und dem Server im Wesentlichen ein Socket-Stream ist, müssen die Anfrageparameter (Zeichen) zunächst in Bytes umgewandelt werden, was dem Codierungsprozess entspricht . Der Server empfängt die Anforderungsparameter, wird dekodiert (Bytes in Zeichen umgewandelt) und dann in das Anforderungsobjekt gekapselt. Wenn die Codierung des Clients nicht mit der Decodierung des Servers übereinstimmt, wird der durch die Anforderung erhaltene Wert des Anforderungsparameters verstümmelt.

Lösung:

1. Antwort verstümmelte Zeichen

Die vom Server an den Browser gesendeten Daten werden standardmäßig gemäß ISO-8859-1 codiert. Nachdem der Browser die Daten empfangen hat, werden sie entsprechend decodiert und angezeigt Wenn der Standard-Dekodierungszeichensatz des Browsers nicht ISO-8859-1 ist, werden verstümmelte Zeichen angezeigt.

Bei verstümmelten Antworten müssen Sie lediglich einen Codierungszeichensatz auf der Serverseite angeben und dann den Browser anweisen, gemäß diesem Zeichensatz zu decodieren. Es gibt drei Möglichkeiten:

1. A. Legen Sie die serverseitige Codierung fest

response.setCharacterEncoding("utf-8");

Die Standardeinstellung ist ISO-8859-1; diese Methode muss vor Response.getWriter festgelegt werden ()

B. Benachrichtigen Sie den Browser über das vom Server gesendete Datenformat.       Response.setHeader("contentType", "text/html; charset=utf-8");

Das vom Server gesendete Datenformat

Response.setContentType("text/html; charset=utf-8");

entspricht Response.setHeader("contentType", "text/html; charset=utf-8" ); Es wird tatsächlich Response.setCharacterEncoding( „utf-8“) überschreiben. Während der Entwicklung müssen Sie nur

B festlegen ");

3. A. Stellen Sie die serverseitige Kodierung ein

response.setCharacterEncoding("utf-8");

B. Der Browser verwendet utf-8 für die Dekodierung

       

Zusammenfassung: Einstellungen:

A. Stellen Sie die serverseitige Codierung ein

response.setCharacterEncoding("utf-8");

B Benachrichtigen Sie den Browser über das vom Server gesendete Datenformat

response.setContentType("text/html;charset=utf -8");

C. Der Browser verwendet utf-8 zum Dekodieren

​​​​​

So habe ich es für alle Fälle eingerichtet;

2. Die Anfrage ist verstümmelt.

Da Es gibt drei Möglichkeiten, über den Browser darauf zuzugreifen: Geben Sie direkt die URL in die Adressleiste ein, um darauf zuzugreifen, klicken Sie auf den Hyperlink auf der Seite, um darauf zuzugreifen, und senden Sie das Formular ab, um darauf zuzugreifen. Der Browser der ersten Zugriffsmethode codiert die Parameter standardmäßig gemäß UTF-8, und die Browser der beiden letztgenannten Zugriffsmethoden codieren die Parameter gemäß der Anzeigecodierung der aktuellen Seite. Daher müssen Sie für die Anforderung verstümmelter Zeichen nur das entsprechende Decodierungsformat auf der Serverseite festlegen. Aufgrund unterschiedlicher Zugriffsmethoden verfügen Browser auch über unterschiedliche Kodierungsformate für Parameter. Um die Verarbeitung zu erleichtern, muss der Zugriff über Hyperlinks und Formulare ebenfalls im UTF-8-Format erfolgen. Das heißt, die Kodierung zur Anzeige der aktuellen Seite muss ebenfalls UTF-8 verwenden. 8, also durchsuchen Der Prozessor verwendet einheitlich UTF-8 zum Codieren von Parametern.

A. Post-Methode

Die Post-Methode gehört zur Formularübermittlung und die Parameter sind im Anforderungstext vorhanden.

request.setCharacterEncoding("utf-8")

B get-Methode

Die von der get-Methode übermittelten Parameter folgen der URL in der Anforderungszeile und der Server dekodiert sie gemäß der Standard-ISO-8859-1 . Diesmal ist es gelöst. Es gibt zwei Möglichkeiten, verstümmelte Zeichen zu verursachen:

Methode 1: Ändern Sie die Standardcodierung der URI-Parameter auf der Serverseite.

Legen Sie in der server.xml von Tomcat das Attribut URIEncoding="UTF-8" fest. . (Dieses Attribut ist standardmäßig nicht festgelegt)

Zum Beispiel: Hinweis: 1. Legen Sie das Attribut useBodyEncodingForURI="true" des Elements fest, was bedeutet, dass der Anforderungstext und die URL dasselbe Codierungsformat verwenden. Durch Festlegen dieser beiden Attribute können Sie sowohl den verstümmelten Code in der Get-Methode als auch den verstümmelten Code in der Post-Methode lösen. 2. Geben Sie an, dass der Server GET und POST gemäß UTF-8 dekodiert, indem Sie den Server ändern.

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