Heim > Artikel > Backend-Entwicklung > PHP-Verarbeitung von HTML-codierten Zeichenfolgen
Als ich heute ein PHP-Skript für den Zugriff auf die Datenbank schrieb, stellte ich fest, dass die darin enthaltenen chinesischen Zeichenfolgen mit HTML-Codierung gespeichert wurden (z. B. lautet die HTML-Codierung, die dem chinesischen Schriftzeichen „Mao“ entspricht, „Mao“). Dadurch war es möglich, Operationen für dieses Feld durchzuführen. Beim Abfragen von Bedingungen können Sie Chinesisch nicht direkt zum Abfragen verwenden, sondern müssen diese vor dem Bedingungsabgleich in Codes umwandeln.
Beim Konvertieren von lesbaren Zeichen und HTML-codierten Zeichen in PHP müssen Sie die Funktionen htmlentities und html_entity_decode verwenden. Schreiben Sie also die folgende Abfrageanweisung:
$sql="selectid,depart_name,first_name,last_name,local_name,extension,mobile,title "; $sql.="frompb_extensione,pb_departmentd "; $sql.="wheree.depart_id=d.depart_id "; $sql.="andd.plant='".$plant."' "; $sql.="and(first_namelike'%".$HTTP_POST_VARS["q"]."%'"; $sql.="orlast_namelike'%".$HTTP_POST_VARS["q"]."%'"; $sql.="orlocal_namelike'%".htmlentities($HTTP_POST_VARS["q"])."%'"; $sql.="orextensionlike'%".$HTTP_POST_VARS["q"]."%'"; $sql.="ormobilelike'%".$HTTP_POST_VARS["q"]."%'"; $sql.="ordepart_namelike'%".$HTTP_POST_VARS["q"]."%'"; $sql.="ortitlelike'%".$HTTP_POST_VARS["q"]."%'"; $sql.=") ";
und führen Sie sie aus. Aber etwas Seltsames ist passiert. Diese Anweisung kann im SQL Analyzer korrekt ausgeführt werden und das Ergebnis wird abgefragt, aber wenn dieses Skript im IE ausgeführt wird, wird das Abfrageergebnis als Null angezeigt.
Nachdem ich diese SQL sorgfältig untersucht und den Quellcode im IE betrachtet hatte, entdeckte ich die Grundursache des Problems. Der Abfragewert wird über die Funktion htmlentities in eine HTML-Kodierung umgewandelt. In dieser Kodierung gibt es ein Sonderzeichen & (wie im Beispiel im ersten Absatz). Dieses Zeichen hat im IE eine andere Bedeutung. Im IE wird im Allgemeinen „&“ zur Darstellung dieses Symbols verwendet, was dazu führt, dass die im IE angezeigte SQL-Anweisungsausgabe von der tatsächlich ausgeführten Anweisung abweicht.
Um dieses Problem zu lösen, müssen wir einen Weg finden, den IE daran zu hindern, „&“ zur Darstellung des „&“-Symbols zu verwenden. Nach einigem Suchen habe ich herausgefunden, dass dieses Problem mit dem folgenden Code gelöst werden kann.
<?php $trans=get_html_translation_table(HTML_ENTITIES); $trans=array_flip($trans); $encoded="Hallo&<Frau>&Krämer"; $original=strtr($encoded,$trans); echo$original; ?>
Führen Sie diesen Code aus und der ausgegebene $original-Variablenwert ist „Hallo &
Die oben genannten Probleme und Lösungen, auf die ich bei der Arbeit gestoßen bin, habe ich auf meinem Blog geschrieben, um sie mit Freunden zu teilen, die auf ähnliche Probleme wie ich gestoßen sind.