Задача: Сделайте функцию, которая принимает строку на русском языке, а возвращает ее транслит. Задачу решил, но когда русское слово разбивается на массив - все символы заменяются на "черный ром с знаком вопроса внутри". Почему? Как это решить? PHP: function wordTranslit($word) { echo $word; // ok $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 $unTranslit = array_flip($translit); // ok $arrWord = str_split($word); // var_dump($arrWord); $result = []; foreach ($arrWord as $letter) { $result[] = $unTranslit[$letter]; } $newWord = implode('', $result); return $newWord; } wordTranslit('кек');
Возможно, дело в многобайтовой кодировке. Почитай доку по array_flip Там в комментах много интересного.
@Jovani, вместо str_split($word); предлагают использовать: preg_split('//u', $word, null, PREG_SPLIT_NO_EMPTY); Кроме того беда с ключем 'e' в массиве $translit. Ещё надо добавить проверку наличия ключа со значение $letter в массиве $unTranslit при, собственно, преобразовании.