Mbstring und PHP müssen bei der Entwicklung von Webanwendungen verwendet werden

1

Bytes und Bits sind zwei Einheiten zum Speichern logischer Informationen. Ein Bit kann als ein Loch betrachtet werden, das mit einem von zwei Werten gefüllt werden kann: 0 oder 1.

Ein Byte ist eine Gruppierung von acht Bits. Aus mathematischer Sicht kann ein Byte 256 verschiedene Werte darstellen (28).

Denken wir an eine Sprache, sagen wir Englisch. Es hat einige Zeichen (a, b, c, … usw.), die in einem Computer durch Bytes dargestellt werden. Die Gesamtzahl der Zeichen im Englischen beträgt nicht mehr als 256, sodass jedes Zeichen durch eine andere 8-Bit-Sequenz dargestellt werden kann.

Strings sind einfach eine Ansammlung von Zeichen. Normalerweise arbeiten String-Operationen in PHP mit Strings aus Einzelbyte-Zeichen. Zum Beispiel: Sie möchten vielleicht die Zeichenfolgen „Hallo” und „Hi” vergleichen. Mit strcmpr() werden die beiden Zeichenfolgen verglichen, wobei angenommen wird, dass jedes Zeichen in der Zeichenfolge ein Byte belegt.

Aber denken Sie an eine Sprache, die mehr als 256 Zeichen hat (z. B. Japanisch), oder wenn wir Zeichen aus mehreren Sprachen gleichzeitig darstellen möchten. Ein Byte-Speicher für jedes Zeichen ist nicht genug. Hier kommt das Multibyte-Konzept ins Spiel.

Eine Zeichenfolge mit japanischem Text kann dazu führen, dass die Funktion strcmpr() einen falschen oder fehlerhaften Wert zurückgibt, da die Annahme, dass ein Byte ein Zeichen darstellt, nicht mehr gilt. Wenn wir mit Multibyte-codierten Strings arbeiten, erfordert die Bearbeitung dieser Strings spezielle Funktionen statt der üblichen Single-Byte-String-Funktionen. Um mit Multi-Byte-Strings in PHP umzugehen, bietet mbstring die Multi-Byte-spezifischen String-Funktionen.

UTF-8 verstehen

UTF steht für Unicode Transformation Format und ist ein Kodierungssystem, das darauf abzielt, jedes Zeichen in jeder Sprache in einem Zeichensatz darzustellen. Es gibt verschiedene Versionen von UTF, von denen einige unten gezeigt werden:

Kodierungsformat Beschreibung
UTF-1 Kompatibel mit ISO-2022, veraltet vom Unicode-Standard.
UTF-7 7-Bit-Verschlüsselungssystem, das hauptsächlich in E-Mail verwendet wurde, aber nicht Teil des Unicode-Standards ist.
UTF-8 8-Bit-Codierungssystem, variable Breite und ASCII-kompatibel.
UTF-EBCDIC 8-Bit-Codierungssystem, variable Breite und EBCDIC-kompatibel.
UTF-16 16-Bit-Kodierungssystem, variable Breite.
UTF-32 32-Bit-Codierungssystem mit fester Breite.

Wir verwenden meistens UTF-8, wenn wir mit Multibyte-Text arbeiten, also konzentrieren wir uns einen Moment darauf. UTF-8 codiert Zeichen in mehreren Bytes nach folgendem Schema:

Woher weiß es also, ob ein Zeichen in einem Byte oder mehreren Bytes gespeichert ist? Dazu betrachtet es das höherwertige Bit des ersten Bytes.

Code Bedeutung
0xxxxxxx Ein Single-Byte-Code
110xxxxx Auf dieses Byte folgt ein weiteres Byte
1110xxxx Auf dieses Byte folgen zwei weitere Bytes
11110xxx Auf dieses Byte folgen drei weitere Bytes
111110xx Auf dieses Byte folgen vier weitere Bytes
1111110x Auf dieses Byte folgen fünf weitere Bytes
10xxxxxx Fortsetzung des Multibyte-Zeichens

Jedes fortgesetzte Byte in einer Mehrbyte-Folge beginnt dann mit 1 und 0 in seinen beiden höchstwertigen Bits, um eine Möglichkeit zu bieten, beschädigte Daten zu erkennen.

Multibyte-Äquivalente allgemeiner Zeichenfolgenfunktionen

Für häufig verwendete String-Funktionen wie strlen(), strops() und substr() gibt es äquivalente Multibyte-Funktionen. Sie sollten die entsprechenden Funktionen verwenden, wenn Sie mit Multibyte-Strings arbeiten.

Tabelle 4: Single-Byte-äquivalente Multi-Byte-String-Funktionen

Einzelnes Byte Multibyte Beschreibung
strlen() mb_strlen() Stringlänge erhalten
strpos() mb_strpos() Finden Sie die Position des ersten Vorkommens einer Zeichenfolge in einer Zeichenfolge
substr() mb_substr() Gibt einen Teil einer Zeichenfolge zurück
strtolower() mb_strtolower() Machen Sie eine Zeichenfolge in Kleinbuchstaben
strtoupper() mb_strtoupper() Machen Sie eine Zeichenfolge in Großbuchstaben
substr_count() mb_substr_count() Zählen Sie die Anzahl der Vorkommen von Teilzeichenfolgen
Teilt() mb_split() String durch regulären Ausdruck in Array aufteilen
mail() mb_send_mail() Senden Sie verschlüsselte E-Mails
Erg() mb_ereg() Übereinstimmung mit regulären Ausdrücken
tun() mb_regi() Übereinstimmung mit regulären Ausdrücken ohne Berücksichtigung der Groß-/Kleinschreibung
Lassen Sie mich ein Beispiel für die Verwendung der Multibyte-Funktion geben:
  • Funktionsname: int mb_strlen (String $str [, String $encoding ] )

  • Beschreibung: Holen Sie sich die Zeichenfolgenlänge.

  • Parameter: str (Eingabestring, dessen Länge bestimmt werden soll)

    Kodierung (Zeichenkodierung)

  • Rückgabewert: Anzahl der Zeichen des Eingabestrings str mit Zeichenkodierung encoding

  • Rückgabetyp: int

Beispielcode: Hier ist ein Beispielcode zur Verwendung der Funktion mb_strlen. Hier ist die Eingabezeichenfolge ein chinesisches Wort und es werden drei verschiedene Zeichencodierungsoptionen verwendet.

$ str ="大大";
echo mb_strlen ($ str, 'utf8' ).
echo mb_strlen ($ str, 'gbk' ).
echo mb_strlen ($ str, ' gb2312').

Einschränkungen: UTF-8 hat einige Einschränkungen, wie-

  • Theoretisch beträgt die höchste Länge von UTF-8-codierten Zeichen sechs Bytes.
  • 0xFE und 0xFF werden in dieser Codierung niemals verwendet.

Aktivieren Sie mbstring von php.ini :

  • Bestätigen Sie die Existenz von php_mbstring.dll im Ext-Ordner.
  • Entkommentieren Sie ;extension=php_mbstring.dll aus php.ini (dh extension=php_mbstring.dll)
  • Server neu starten.

Laufzeitkonfiguration: Um einige mbstring-Funktionen zu aktivieren, sollten einige weitere Einstellungen geändert werden.

Tabelle 5: Konfigurationen in php.ini

Name Standardwert Veränderbare Option
mbstring.Sprache neutral PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.detect_order NULL PHP_INI_ALL
mbstring.http_input passieren PHP_INI_ALL
mbstring.http_output passieren PHP_INI_ALL
mbstring.internal_encoding NULL PHP_INI_ALL
mbstring.script_encoding NULL PHP_INI_ALL
mbstring.substitute_character NULL PHP_INI_ALL
mbstring.func_overload 0 PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.encoding_translation 0 PHP_INI_SYSTEM | PHP_INI_PERDIR

Erläuterung der Konfigurationsmöglichkeiten:

Die „änderbare Option” bestimmt den änderbaren Moduswert. Es beschreibt, wie und von wo aus die mbstring-Optionen geändert werden können. Hier ist die Bedeutung für die Moduswerte:

Tabelle 6: Unterschiedlicher Änderungsmodus

Modus Bedeutung
PHP_INI_SYSTEM Den Eintrag können wir per php.ini oder httpd.conf setzen
PHP_INI_PERDIR Den Eintrag können wir über php.ini, .htaccess, httpd.conf oder .user.ini setzen
PHP_INI_ALL Wir können den Eintrag von überall setzen
PHP_INI_USER Wir können den Eintrag mit einem Benutzerskript festlegen.

So wechseln Sie vom Benutzerskript:

Wir können den folgenden Code verwenden, um die interne Codierung von mbstring aus dem Benutzerskript festzulegen:

<?php
ini_set('mbstring.internal_encoding', 'UTF-8');
?>

So wechseln Sie von php.ini:

Wir können die Datei php.ini bearbeiten, um einige mbstring-Optionen festzulegen.

; Set default language
mbstring.language = Neutral; Set default language to Neutral(UTF-8) (default)
mbstring.language = English; Set default language to English
 
; Enabled HTTP input encoding translation.
mbstring.encoding_translation = On
 
 
; Set default HTTP input character encoding
 
mbstring.http_input = pass ; No conversion.
mbstring.http_input = auto ; Set HTTP input to auto
Einige Probleme im Zusammenhang mit mbstring:

Die Verwendung von mbstring-Funktionen kann manchmal zu Belästigungen führen. Ich werde hier einige Probleme bei der Verwendung von Multibyte-Funktionsüberladung diskutieren. Denken wir uns ein Szenario aus.

Sie haben die Option mbstring.func_overload in Ihrer php.ini-Datei aktiviert. Ihre Arbeit läuft gut. Sie überladen die Single-Byte-String-Funktion durch Multi-Byte-String-Funktionen. Aber was passiert, wenn Sie eine externe Bibliothek benötigen, die häufig eine Zeichenfolgenfunktion verwendet?

Es gibt eine Lösung für dieses Problem. Sie können mbstring.internal_coding verwenden. Wenn Sie eine externe Bibliothek aufrufen, verwendet sie die Einzelbyte-Codierung, und wenn Sie zu Ihrem Projekt zurückkehren, wird die Multibyte-Codierung implementiert. Aber was passiert, wenn es einen Rückruf zwischen Ihrem Projekt und der externen Bibliothek gibt? Hier scheitert es.

Daher müssen Sie diese Probleme bei der Verwendung von mbstring-Optionen berücksichtigen.

Bedeutung von mbstring für die Webentwicklung:

Um eine internationale Webanwendung zu entwickeln, ist die Verwendung von mbstring ein Muss. Andernfalls wird Ihre Bewerbung auf einige bestimmte Nationen und Sprachen beschränkt. Als Entwickler empfehle ich Ihnen, sich etwas Wissen über diesen Bereich anzueignen und sich als Webprogrammierer effizient zu machen.

Aufnahmequelle: instantshift.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen