2016-11-30 4 views
3

Ich habe string[0] verwendet, um das erste Zeichen von Benutzernamen/Nachnamen zu verkürzen und anzuzeigen. Und es hat gut funktioniert, bis der Name des Benutzers mit einem Sonderzeichen wie ö, ä, ü beginnt.Wie erhält man das erste Zeichen einer Zeichenkette, die Sonderzeichen mit PHP enthält?

zum Beispiel:

$name = 'über'; 
echo $name[0]; 
// echoes nothing 

Inzwischen verwende ich mb_substr($string, 0, 1) statt. Aber ich vermisse wirklich $name[0] :). Es war viel schneller und kürzer. Ich frage mich immer noch, was der Grund ist und ob es eine Möglichkeit gibt, diese Syntax mit speziellen Zeichen zu verwenden.

+3

Wenn Sie eine Version niedriger als PHP 5.6 verwenden, achten Sie auf [dieses Problem] (https://3v4l.org/Pk97V): Vor 5.6 würde die 'mb_substr()' ein Multi-Byte brechen Zeichen wie 'substr()' würde. – Henders

Antwort

7

Das Zeichen ü ist kein einzelnes Byte. Es ist ein Multi-Byte-Zeichen (zwei Byte).

char

Sie versuchen, das erste Byte der Zeichenkette zuzugreifen, so dass es nicht funktioniert. Genau aus diesem Grund wurde mb_substr entworfen.

Führt einen multibytesicher substr() Betrieb basierend auf der Anzahl von Zeichen. Position wird vom Anfang von str gezählt. Die Position des ersten Charakters ist 0. Die zweite Zeichenposition ist 1 und so weiter.

Wenn Sie nur versuchen, die $name[0] zu tun, bekommt es ist das erste Zeichen der Multi-Byte-Zeichen, die nur ein leerer String oder ein Steuerzeichen die .. über den u anzuzeigen. (Nimm es nur zum Beispiel, wie .. + u = ü).

Verwandte Themen