Mbstring und PHP müssen bei der Entwicklung von Webanwendungen verwendet werden
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.