Heim >Backend-Entwicklung >PHP-Problem >So lösen Sie das Problem der Übertragung verstümmelter chinesischer Zeichen von Ajax an Hintergrund-PHP
Lösung für die von Ajax an das Hintergrund-PHP übertragenen chinesischen verstümmelten Zeichen: 1. Setzen Sie „iconv('utf-8','gb2312',$_POST['Data']);"; 2. Lösen Sie das Codierungsproblem durch arrayRecursive- und JSON-Methoden Das war's.
Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP Version 7.1, Dell G3-Computer.
Wie kann das Problem gelöst werden, dass chinesische verstümmelte Zeichen in Ajax an den PHP-Hintergrund übertragen werden?
Lösung für chinesische verstümmelte Zeichen in AJAX-Anwendungen in PHP
Chinesische verstümmelte Zeichen treten häufig bei der Entwicklung von Webanwendungen auf!
Heute werde ich hauptsächlich meine Gedanken ordnen:
Die meisten Situationen, in denen verstümmelte Zeichen auftauchen, sind was Wir stoßen auf AJAX! Da das direkte Lesen der Datenbank keine Codierungsprobleme verursacht ~
1 Beim Senden von Daten vom Front-End-JS an das Back-End
AJAX-Daten, ob sie direkt verwendet werden zugrunde liegendes xmlHttprequest oder die Verwendung von jQuery Bei der Übertragung von Daten mit Ajax wird vor dem Senden utf-8 verwendet. Wenn unsere Seite UTF-8 ist, werden die übergebenen chinesischen Daten nicht verstümmelt! ist GB2312~ Das Problem ist: Hier wird GBK in UTF-8 konvertiert und an das Backend gesendet. Zu diesem Zeitpunkt ist das, was direkt vom Backend empfangen wird, verstümmelt ('utf-8','gb2312' ,$_POST['Data']);)
Das Prinzip ist sehr einfach: Der direkte Empfang im Hintergrund ist utf-8, und die Seiten sind alle GBK, dann einfach konvertieren Die empfangenen Daten werden an GBK zurückgegeben!
Führen Sie zu diesem Zeitpunkt einfach den Datenbankvorgang aus! Was in der Datenbank gespeichert ist, muss aus normalen chinesischen Zeichen bestehen
2. Auf der Hintergrundseite steht, dass die Daten in der Datenbank Chinesisch enthalten Zeichen und gibt sie dann an JS zurück. Im Fall der Rezeption liest die PHP-Seite normale chinesische Zeichen aus der Datenbank und möchte sie über AJAX zurücksenden~Wenn es zurückgegeben wird, werden die Daten direkt zurückgesendet in Form einer Zeichenfolge ohne jegliche Verarbeitung! Das Problem ist, wenn Chinesisch auf der Titelseite angezeigt wird. Ansonsten müssen wir die von der Rezeption erhaltenen Daten verpacken! Wird schwierig zu verarbeiten sein! Wenn es sich um PHP handelt, verwenden wir jetzt normalerweise JSON für die Übertragung! Auf diese Weise sind die an das Front-End-JS übergebenen Daten sehr einfach zu entpacken und zu verarbeiten! Im PHP-Hintergrund tritt das Problem auf! Beim Konvertieren von JSON werden Sie feststellen, dass beim Lesen aus der Datenbank NULL angezeigt wird. Dies liegt daran, dass JSON nur der Codierung entgeht! Escapes!Wie auch immer, JSON wird bei der Konvertierung in Chinesisch verstümmelt~~
Die Lösung lautet wie folgt:
function arrayRecursive(&$array, $function, $apply_to_keys_also = false) { static $recursive_counter = 0; if (++$recursive_counter > 1000) { die('possible deep recursion attack'); } foreach ($array as $key => $value) { if (is_array($value)) { arrayRecursive($array[$key], $function, $apply_to_keys_also); } else { $array[$key] = $function($value); } if ($apply_to_keys_also && is_string($key)) { $new_key = $function($key); if ($new_key != $key) { $array[$new_key] = $array[$key]; unset($array[$key]); } } } $recursive_counter--; } function JSON($array) { arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json); } $json_string=JSON($data); //$obj = json_decode($json_string); print_r($json_string);Nach diesen Vorgängen werden Sie feststellen, dass die chinesischen Zeichen vom Hintergrund-PHP aus der Datenbank gelesen werden werden erfolgreich in das JSON-Format konvertiert und die chinesische Anzeige ist normal Natürlich sind die Daten, die die Rezeption zu diesem Zeitpunkt empfängt, im JSON-Format und die chinesischen Schriftzeichen sind auch im JSON-Format! Okay~ ~Das sind die Ideen~Es gibt viele Methoden online! Es ist ein bisschen verwirrend~Die Hauptsache ist, sich die Ideen zu merken!Dann sehen Sie einfach, welche Funktionen und Methoden Sie verwenden können, um verwandte Codierungsprobleme zu lösen!
Es ist ärgerlich, dass JS vorne ist -end AJAX muss transkodiert werden! Und dann im Hintergrund dekodiert werden! -end ist GBK. Es wird nicht für Transkodierungsvorgänge verwendet. Führen Sie lediglich relevante Konvertierungen im Hintergrund-PHP-Code durch.
Empfohlenes Lernen: „PHP-Video-Tutorial
“Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der Übertragung verstümmelter chinesischer Zeichen von Ajax an Hintergrund-PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!