2013-11-29 3 views
0

У меня проблема с моей строкой. После цикла for все я получаю несколько других символов вместо моих точных кириллических букв. Цель состоит в том, чтобы изменить кириллические буквы: ąčęėįšųūž в это: a1, c2, e1, e2, i1, s2, u1, u2, z2. Я придумал tihs:Неправильная кодировка при попытке заменить кириллические символы

$ltSymbolsArray = array(
     'a1' => 'ą', 
     'c2' => 'č', 
     'e1' => 'ę', 
     'e2' => 'ė', 
     'i1' => 'į', 
     's2' => 'š', 
     'u1' => 'ų', 
     'u2' => 'ū', 
     'z2' => 'ž' 
); 
    $string = 'ąsąžadcę'; 

    for ($i = 0; $i < strlen($string); $i++) { 
    foreach ($ltSymbolsArray as $key => $value) { 
     if ($string[$i] == $value) { 
     $string[$i] = $key; 
     } 
    } 
    } 

Это похоже на простое решение, но я не могу обработать кодировку. Кодирование - загадка для меня, поэтому я бы очень признателен за любую помощь в решении этой проблемы.

ответ

0

Вы не можете просто перебирать строку в юникоде и ожидать, что каждая итерация получит полный символ, если один символ действительно перейдет более одного байта.

Используйте preg_split в сочетании с модификатором unicode, чтобы разделить строку на действительные символы юникода. Затем используйте результат этого, чтобы заменить символы в исходной строке.

Вы также можете использовать один из функций многобайтовых регулярных выражений, такие как mb_ereg_replace

+0

Спасибо вам советует, я буду определенно попытаться использовать один из тезисов способов решить эту проблему :) –

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