@Elsa12

Почему не работает замена символов в строке PHP?

Привет! Есть задача, которую никак не могу решить. Она очень элементарная, нужно заменить символы в строке на русском, такими же символами строки на английском, например русскую о на английскую о, и делать это с вероятностью 33%. Для этого написала скрипт, но он почему то не работает, подскажите пожалуйста где ошибка. Мне кажется что тут происходит слет кодировки.

function fg($str){

    $first_arr = array("а", "о", "у", "е", "с", "х");
    $second_arr = array("a", "o", "y", "e", "c", "x");
    
    for ($index = 0; $index < strlen($str); $index++){
        for($j = 0; $j < count($first_arr); $j++){
            
            //echo $str[$index].' '.$first_arr[$j].'</br>';
            
            if($str[$index] == $first_arr[$j]){
                
                if(rand(1,3) == 2){
                    $str{$index} = $second_arr[$j];
                }
            }
        }
    }
    
    return $str;
}

echo fg("Ехал грека через реку видит грека в реке рак.");


В итоге, увы, все буквы русские :(
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
@sagechild
программист php
Немного изменил. Теперь ваша функция производит замену.
function fg($str)
{
    $rusToEng = ["а" => "a", "о" => "o", "у" => "y", "е" => "e", "с" => "c", "х" => "x"];
    $strChanged = '';

    foreach (preg_split('//u', $str) as $char) {
        if ($rusToEng[$char] && rand(1, 3) == 2) {
            $strChanged .= $rusToEng[$char];
        } else {
            $strChanged .= $char;
        }
    }

    return $strChanged;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
У вас кодировка UTF-8.
В этой кодировке русские символы кодируются двумя байтами.
Поэтому здесь:
if($str[$index] == $first_arr[$j]){
вы сравниваете один байт с двумя байтами. Естественно, они не равны, так как длина разная.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы