2016-11-30 2 views
3

Я использовал string[0], чтобы сократить и показать первый символ имен пользователей/lastnames. И он отлично работал, пока имя пользователя не начинается со специального символа, такого как ö, ä, ü.Как получить первый символ строки содержат специальные символы, используя php?

, например:

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

Между тем я использую mb_substr($string, 0, 1) вместо этого. Но я действительно скучаю $name[0] :). Это было намного быстрее и короче. Я все еще задаюсь вопросом, в чем причина, и есть ли способ использовать этот синтаксис со специальными символами.

+3

Если вы используете версию ниже PHP 5.6, обратите внимание на [эту проблему] (https://3v4l.org/Pk97V): до 5.6, 'mb_substr()' сломает многобайтовый символ, как 'substr()' будет. – Henders

ответ

7

Персонаж ü не является символом байта. Это многобайтовый (двухбайтовый) символ.

char

Вы пытаетесь получить доступ к первому байту строки символов, так что она не работает. Именно по этой причине был разработан mb_substr.

Выполняет многобайтные substr() операцию на основе количества символов. Позиция подсчитывается с начала строки. Позиция первого символа равна 0. Вторая позиция символа равна 1 и так далее.

Если вы просто пытаетесь сделать $name[0], это получить первый символ многобайтового символа в, который просто пустой строке или символ управления для отображения .. над u. (возьмите это, например, как .. + u = ü).

Смежные вопросы