Добрый вечер! Проблема в следующем. 1) Вот скрипт, который транслирует на латиницу русский текст, указанный в скрипте: PHP: <?php ## Транслитерация строк. function transliterate($st) { //вывод до обработки echo $st."<br>"; $st = strtr($st, "абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ", "abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE" ); $st = strtr($st, array( 'ё'=>"yo", 'х'=>"h", 'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>'', 'ь'=>'', 'ю'=>"yu", 'я'=>"ya", 'Ё'=>"Yo", 'Х'=>"H", 'Ц'=>"Ts", 'Ч'=>"Ch", 'Ш'=>"Sh", 'Щ'=>"Shch", 'Ъ'=>'', 'Ь'=>'', 'Ю'=>"Yu", 'Я'=>"Ya", )); return $st; } //вывод после обработки echo transliterate("У попа была собака, он ее любил."); ?> При отладке с помощью PHPEd в $st попадает вот это - "РЈ РїРѕРїР° была собака, РѕРЅ ее любил." И при выводе получается вот: У попа была собака, он ее любил. - ВЫВОД $st ДО ОБРАБОТКИ Z� ZIZGZIZb ZgIFZAZb IMZGZgZbZiZb, ZGZD ZlZl ZAI�ZgZsZA. - ВЫВОД $st ПОСЛЕ ОБРАБОТКИ Установлено: PHP 5.3.5, Apache 2.2, PHPED 5.95. Сам скрипт написан в кодировке UTF8. Подскажите, дайте дельный совет, пожалуйста. ВОПРОС СОСТОИТ В СЛЕДУЮЩЕМ: почему в $st попадает такая белеберда (см. выше). Подскажите пожалуйста. Как можно решить эту проблему?
У меня такое работало. Попробуй. Самопальная, правда. Под свои нужды надо настроить. Код (Text): function translit($slovechko){ $replaceArr=array( 'А'=>'a','Б'=>'b','В'=>'v','Г'=>'g','Д'=>'d','Е'=>'e','Ё'=>'ie','Ж'=>'j','З'=>'z','И'=>'i','Й'=>'ii','К'=>'k','Л'=>'l','М'=>'m','Н'=>'n', 'О'=>'o','П'=>'p','Р'=>'r','С'=>'s','Т'=>'t','У'=>'u','Ф'=>'f','Х'=>'h','Ц'=>'c','Ч'=>'ch','Ш'=>'sh','Щ'=>'sh','Ъ'=>'','Ы'=>'y', 'Ь'=>'','Э'=>'e','Ю'=>'yu','Я'=>'ya', 'а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'ie','ж'=>'j','з'=>'z','и'=>'i','й'=>'ii','к'=>'k','л'=>'l','м'=>'m','н'=>'n', 'о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'h','ц'=>'c','ч'=>'ch','ш'=>'sh','щ'=>'sh','ъ'=>'','ы'=>'y','ь'=>'', 'э'=>'e','ю'=>'yu','я'=>'ya', ','=>'_', '/'=>'_', ':'=>'_', '#'=>'_num_', '№'=>'_num_', ' '=>'_'); return strtr($slovechko,$replaceArr); }
У меня вопрос заключается в следующем: Почему в $st попадает такая фигня "РЈ РїРѕРїР° была собака, РѕРЅ ее любил." Там должен быть текст : У попа была собака, он ее любил. Насколько я понимаю - это проблема с кодировкой. Подскажите.
Я правильно установил кодировку страницы в заголовке? Сам скрипт я преобразовал в utf-8 с помощью Notepad++. PHP: <?php ## Транслитерация строк. header("Content-Type: text/html; charset=utf-8"); function transliterate($st) { Но это все равно не помогает(((
Подскажи, пожалуйста, поподробнее. Что ты имеешь ввиду? Я скрипт писал в utf-8. В заголовке указал utf-8. И не получается. Если ты знаешь, объясни, пожалуйста.
сделай перед вызовом функции echo $input; посмотрим, что на входе. если там уже кривое, то используй iconv для того чтобы конвертировать входной параметр из кодировки XXXX в кодировку utf-8. и только потом направляй строку в функцию.
Если я правильно понял тебя, то я сделал следующее: PHP: <?php ## Транслитерация строк. header("Content-Type: text/html; charset=utf-8"); function transliterate($st) { echo $st."<br>"; $st = strtr($st, "абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ", "abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE" ); $st = strtr($st, array( 'ё'=>"yo", 'х'=>"h", 'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>'', 'ь'=>'', 'ю'=>"yu", 'я'=>"ya", 'Ё'=>"Yo", 'Х'=>"H", 'Ц'=>"Ts", 'Ч'=>"Ch", 'Ш'=>"Sh", 'Щ'=>"Shch", 'Ъ'=>'', 'Ь'=>'', 'Ю'=>"Yu", 'Я'=>"Ya", )); return $st; } $input = "У попа была собака, он ее любил"; echo $input."<br>"; echo transliterate("У попа была собака, он ее любил."); ?> При отладке через PHPEd в $input хранится следующее:"РЈ РїРѕРїР° была собака, РѕРЅ ее любил" Результат получается вот такой: У попа была собака, он ее любил У попа была собака, он ее любил. Z� ZIZGZIZb ZgIFZAZb IMZGZgZbZiZb, ZGZD ZlZl ZAI�ZgZsZA. Ты это имел ввиду?