За последние 24 часа нас посетили 22609 программистов и 1028 роботов. Сейчас ищут 534 программиста ...

Помогите, не показывает русские символы:

Тема в разделе "PHP для новичков", создана пользователем Jovani, 4 июл 2018.

  1. Jovani

    Jovani Новичок

    С нами с:
    4 июл 2018
    Сообщения:
    3
    Симпатии:
    0
    Задача: Сделайте функцию, которая принимает строку на русском языке, а возвращает ее транслит.
    Задачу решил, но когда русское слово разбивается на массив - все символы заменяются на "черный ром с знаком вопроса внутри". Почему? Как это решить?
    PHP:
    1. function wordTranslit($word)
    2.     {
    3.         echo $word; // ok
    4.         $translit = ['a' => 'а', 'b' => 'б', 'v' => 'в', 'g' => 'г', 'd' => 'д', 'e' => 'е', 'e' => 'ё', 'zh' => 'ж', 'z' => 'з', 'i' => 'и', 'i' => 'й', 'k' => 'к', 'l' => 'л', 'm' => 'м', 'n' => 'н', 'o' => 'о', 'p' => 'п', 'r' => 'р', 's' => 'с', 't' => 'т', 'u' => 'у', 'f' => 'ф', 'kh' => 'х', 'ts' => 'ц', 'ch' => 'ч', 'sh' => 'ш', 'shch' => 'щ',   'y' => 'ы', 'ie' => 'ъ', 'e' => 'э', 'iu' => 'ю', 'ia' => 'я']; //ok
    5.         $unTranslit = array_flip($translit); // ok
    6.         $arrWord = str_split($word); //
    7.         var_dump($arrWord);
    8.         $result = [];
    9.         foreach ($arrWord as $letter) {
    10.             $result[] = $unTranslit[$letter];
    11.         }
    12.         $newWord = implode('', $result);
    13.         return $newWord;
    14.  
    15.     }
    16.     wordTranslit('кек');
     
  2. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Возможно, дело в многобайтовой кодировке. Почитай доку по array_flip
    Там в комментах много интересного.
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Jovani, вместо str_split($word); предлагают использовать: preg_split('//u', $word, null, PREG_SPLIT_NO_EMPTY);
    Кроме того беда с ключем 'e' в массиве $translit.
    Ещё надо добавить проверку наличия ключа со значение $letter в массиве $unTranslit при, собственно, преобразовании.