Ich habe diesen Code:
%Vor% Da $string
3 persische Zeichen hat, muss die Ausgabe 3 sein, aber ich bekomme 6 .
علی
hat 3 Zeichen. Warum ist meine Ausgabe 6 ?
Wie kann ich strlen()
in PHP für Persisch mit realer Ausgabe verwenden?
Verwenden Sie mb_strlen
Gibt die Anzahl der Zeichen in der Zeichenkette str mit der Zeichenkodierung (der zweite Parameter) zurück. Ein Multi-Byte-Zeichen wird als 1 gezählt.
Da Ihre 3 Zeichen alle Multibyte sind, erhalten Sie 6 mit strlen
zurück, aber dies liefert 3
wie erwartet.
Hinweis
Es ist wichtig, die Macht dieser Methode und ähnlicher Alternativen nicht zu unterschätzen. Zum Beispiel könnte man geneigt sein, ok zu sagen, wenn die Zeichen Multibyte sind, dann einfach die Länge mit strlen
erhalten und sie durch 2 teilen, aber das funktioniert nur, wenn alle Zeichen des Strings Multibyte und sogar ein Punkt% sind co_de% wird die Zählung ungültig machen. Zum Beispiel das
Gibt .
zurück, was korrekt ist. Also nimmt diese Funktion nicht nur die ganze Länge und teilt sie durch 2, sie zählt 1 für jedes Multi-Byte-Zeichen und 1 für jedes Single-Byte-Zeichen.
Hinweis2:
Es sieht so aus, als hätten Sie sich entschieden, diese Methode nicht zu verwenden, da 4
extension nicht standardmäßig für alte PHP-Versionen aktiviert ist und Sie vielleicht entschieden haben, es nicht zu aktivieren :) Für zukünftige Leser ist es jedoch nicht schwierig und es ist ratsam, es zu aktivieren, wenn Sie mit Multi-Byte-Zeichen umgehen, da es nicht nur die Länge ist, mit der Sie möglicherweise umgehen müssen. Siehe Handbuch
Ab PHP5 kann iconv_strlen()
verwendet werden (wie in php.net beschrieben) , es gibt die Zeichenanzahl einer Zeichenfolge zurück, also ist es wahrscheinlich die beste Wahl):
Basierend auf dieser Antwort von [email protected] können Sie Folgendes versuchen:
%Vor% Wie andere auch geantwortet haben, können Sie mb_strlen()
verwenden:
Es gibt einen sehr kleinen Unterschied zwischen ihnen (für illegale lateinische Zeichen):
%Vor%Leistung: mb_strlen () ist der schnellste. Insgesamt gibt es keinen Unterschied zwischen iconv_strlen () und string_length () bei der Performance. Aber erstaunlicherweise ist mb_strlen () schneller als beide 9 mal (wie ich getestet habe)!
Hinweis: Fügen Sie jeder Anweisung 'echo' hinzu, um sie auszugeben! ;)