Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie MB_Get_Info, um das verstümmelte Problem in der Charaktercodierungskonvertierung zu lösen

Verwenden Sie MB_Get_Info, um das verstümmelte Problem in der Charaktercodierungskonvertierung zu lösen

gitbox 2025-05-11

Bei der Entwicklung mehrsprachiger Websites oder der Verarbeitung externer Datenquellen ist die Verwirrung der Charaktercodierung häufig Kopfschmerzen. Wenn die Codierungseinstellungen falsch sind, erfolgt mindestens der verstümmelte Code und die Daten gehen verloren und die Funktion wird abnormal.
In PHP bietet die Mbstring -Erweiterung viele Funktionen für die Verarbeitung von Multibyte -Zeichen, darunter mb_get_info () ein sehr nützliches Instrument zur Positionierung von Codierungsproblemen.

Was ist mb_get_info ()

mb_get_info () ist eine Funktion in der Php Mbstring -Erweiterung, um die Konfigurationsinformationen der aktuellen Multibyte -String -Verarbeitung zu erhalten.
Es kann die aktuelle interne Codierung, die HTTP -Eingangs-/Ausgabe -Codierung, die Spracheinstellungen usw. zurückgeben und uns dabei helfen, die aktuelle Codierungsumgebung des Skripts schnell zu verstehen.

Funktionssignatur ist sehr einfach:

 array mb_get_info ([ string $type = "all" ] )

Wenn keine Parameter übergeben werden, werden alle Konfigurationsinformationen standardmäßig zurückgegeben. Wenn Sie einen Typ bestehen, wie z. B. "Internal_encoding" , werden nur die entsprechenden Informationen zurückgegeben.

Warum verursacht die Charaktercodierung verstümmelter Code?

PHP ist standardmäßig nicht sehr "empfindlich" für die Charaktercodierung, insbesondere wenn Multi-Byte-Codierungen wie UTF-8, GBK und Shift-JIS behandelt werden. Der verstümmelte Code tritt auf, wenn er leicht nicht richtig verarbeitet wird.
Häufige Gründe sind:

  • Die Eingabecodierung steht im Widerspruch zur Skriptverarbeitung nicht

  • Die Codierungseinstellungen der Ausgabe sind falsch

  • Codierungsfehler während der Datenbankverbindung

  • SERVERTETIERT DER FRAGE DER STANDAULEN -LANDAGE

Wenn Sie zu diesem Zeitpunkt nicht wissen, welche Codierung in der aktuellen Umgebung verwendet wird, wird es schwierig sein, die richtige Medizin zu verschreiben. Und mb_get_info () kann uns helfen, es herauszufinden.

Wie kann ich mit mb_get_info () verstümmelten Code beheben?

Hier ist ein einfaches Beispiel, das zeigt, wie man mb_get_info () verwendet, um Probleme zu finden:

 <?php
// Zeigen Sie alle Konfigurationen für die aktuelle Multibyte -Verarbeitung an
$info = mb_get_info();
print_r($info);

// Konzentrieren Sie sich auf die interne Codierung
echo "Internal Encoding: " . mb_internal_encoding() . PHP_EOL;

// Setzen Sie die Codierung auf UTF-8,Vermeiden Sie verstümmelten Code
mb_internal_encoding("UTF-8");

// Überprüfen Sie es erneut
echo "New Internal Encoding: " . mb_internal_encoding() . PHP_EOL;
?>

Die Ausgabe kann ähnlich sein wie mit:

 Array
(
    [internal_encoding] => UTF-8
    [http_output] => UTF-8
    [http_input] => UTF-8
    [language] => neutral
    ...
)
Internal Encoding: UTF-8
New Internal Encoding: UTF-8

Wenn Sie feststellen , dass Internal_encoding nicht UTF-8 ist (z. B. ISO-8859-1 ), ist es wahrscheinlich, dass es die Quelle des verstümmelten Codes ist.
Durch direktes Zurücksetzen mit mb_internal_encoding ("utf-8") können Sie das Problem des verstümmelten Codes vermeiden.

Praktischer Fall: Verhindern

Angenommen, Sie haben eine einfache Schnittstelle, die den Benutzereingang wie folgt an das Frontend zurückgibt:

 <?php
header('Content-Type: text/html; charset=UTF-8');

// Überprüfen Sie den aktuellen internen Code
if (mb_internal_encoding() !== 'UTF-8') {
    mb_internal_encoding('UTF-8');
}

// Nehmen Sie die Benutzereingabe an(Wahrscheinlich aus der Form、Schnittstelle usw.)
$user_input = "Hallo,Welt!";

// Ausgabe
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
?>

Auch wenn der Benutzer andere Engpässe wie GB2312 einreicht, verarbeitet der Server sie einheitlich in UTF-8 und gibt sie aus und kann sie stark reduziert werden.
Wenn eine umfassendere Codierungserkennung erforderlich ist, können Sie sie auch mit MB_DETECT_ENCODING () verwenden, um automatisch zu identifizieren und zu konvertieren.

Zusätzlich: Dokumentadresse

Wenn Sie mehr über die Verwendung von mb_get_info () und mbstring erfahren möchten, können Sie sich auf die offizielle Dokumentation beziehen:
https://gitbox.net/php/manual/zh/function.mb-get-info.php