Wie kann ich Strlen in PHP für Persisch verwenden?

7

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?

    
user3932710 01.09.2014, 06:29
quelle

5 Antworten

6

versuche das:

%Vor%

es wird für jede PHP-Version funktionieren.

    
Power Man 01.09.2014, 06:55
quelle
13

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.

%Vor%

Geige

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

%Vor%

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

    
Hanky Panky 01.09.2014 06:31
quelle
5

mb_strlen function ist dein Freund

    
j123b567 01.09.2014 06:31
quelle
4
%Vor%     
dashtinejad 01.09.2014 06:40
quelle
0

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):

%Vor%

Basierend auf dieser Antwort von [email protected] können Sie Folgendes versuchen:

%Vor%

Wie andere auch geantwortet haben, können Sie mb_strlen() verwenden:

%Vor%
  • 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! ;)

    
MAChitgarha 24.06.2017 18:41
quelle

Tags und Links