2016-04-16 2 views
-1

Я пытался делать это так:Как пропустить все символы в строке?

for ($i = 0; $i < strlen($s); $i++) { 
    $char = $s[$i]; 
    ... 
} 

, но это, кажется, неправильно, когда символы, которые не помещаются в 1 байт участвуют. strlen («ää») возвращает 4, например, что предполагает, что они состоят из 2 байтов.

Как пройти через каждый символ в php?

ответ

5

Этот код петли через байт в строке, а не символы .... использовать mb_* функции для работы с многобайтными символьных строк

for ($i = 0; $i < mb_strlen($s); $i++) { 
    $char = mb_substr($s, $i, 1); 
    ... 
} 
0

Простой однострочный «трюк» в получить набор многобайтовых символов с помощью функции preg_split с /u (UTF-8) модификатора:

$str = "äänä"; 
$chars = preg_split("//u", $str, 0, PREG_SPLIT_NO_EMPTY); 

print_r($chars); 

выход:

Array 
(
    [0] => ä 
    [1] => ä 
    [2] => n 
    [3] => ä 
)