@AlpineMilk

Как сравнить строку не по байтам а символам?

есть форма ввода, и есть 2 массива с алфавитами
$pl = ['a','ą','b','c','ć','d','e','ę','f','g','h','i','j','k','l','ł','m','n','ń','o','ó','p','r','s','ś','t','u','w','y','z','ź,','ż'];

$pl16 = ['m','n','ń','o','ó','p','r','s','ś','t','u','w','y','z','ź,','ż','a','ą','b','c','ć','d','e','ę','f','g','h','i','j','k','l','ł'];

нужно сделать кодировку вида rot16, если я ввожу английские символы то работает отлично, все выводит, но если я в форму ввиду букву такого вида ą , то уже не работает. Так как буква польского алфавита состоит из 2х байтов. Как мне достать каждый символ по очереди? и заменить его? вот эта функция
function rot16($str){

    $rot16 = '';

    for($i = 0; $i < strlen($str); $i++){
       for ($j = 0; $j < count($pl); $j++) 
       { 
          if ($str[$i] == $pl[$j]){
            $res = str_replace($str[$i], $pl16[$j],$str[$i]);
          }
       }        
       $rot16 .= $res;
    }
    return $rot16;
}

массивы находятся в функции, и $str это входная строка из формы. Нужно вместо $str[$i] == $pl[$j] как то сравнить каждый символ строки, а не байт.
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 2
65536
@65536
mb_strlen, mb_str_replace
Ответ написан
Комментировать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы