Нужно сделать функцию, которая бы переводила строку из кирилицы в латиницу и обратно в зависимости от переданных параметров Очень хочется сделать просто вот так: PHP: <?php function translit($str, $do = 1) { $str = strtolower($str); $ru = array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 'э', 'ю' , 'я', ' '); $en = array(); //Соответственно эквиваленты, которые писать лень if($do == 1) { $str = str_replace($ru, $en, $str); } //Если $do == 1 переводим с кирилицу на латиницу else { $str = str_replace($en, $ru, $str); } //Иначе с латиницы на кирилицу return $str; } ?> Легко можно перевести строку с кирилицы на латиницу, но вот обратно возникают проблемы, так как некоторые символы, например, "ч", обозначаются сразу двумя буквами эквивалента - "ch", соответственно, функция переведет "ch" не как "ч", а как "цх". В голову напрашиваются только сложные алгоритмы, перебирающие строку посимвольно и проверяющие следующий и предыдущий символы. Но я почти уверен, что есть более простые решения. Помогите, можно на пальцах без кода
Egorov Перевести простым алгоритмом, а потом дополнительными str_replace заменить все "цх" и иже с ними на более читабельные символы Но скорее всего, результат все равно будет неидеальным, типа "Чинвалле"...
А чем может помочь iconv? На всякий случай, объясню для чего нужен такой транслит. Обрабатывается некий текст и генерируются много ссылок типа http://site?tag=privet, при переходе по ссылке значение $_GET['tag'] переводится в русское слово и на основе этого русского слова из текста выдирается только соответствующий этому слову текст. Как теги в блогах, если так будет легче понять. Я так понял идеального транслита сделать невозможно и заменил двойные символы цифрами (sh = 1, ch=2). Адрес типа http://site?tag=2islo смотрится некрасиво и непонятно, но все же лучше, чем русские символы в адресной строке FF
Egorov для передачи русских слов обычно пользуются urlencode и urldecode, а не хитрые самописные системы. но из-за необходимости обратной перекодировки не подойдёт
Загроможденность получится Намного легче кажый раз делать транслит. Я уже смирился, пусть будут цифры вместо некоторых символов. Нужен именно транслит, пусть даже не совсем правильный.
Вобщем никак Не совсем понял, что именно предложено - хранить сразу и русский и английский текст(загромаждение), или сразу английский (не получится). Просто база данных представляет собой файл, который нужно рассортировать по категориям, тегам и прочим. Это все делается только через глубокую жопу + нужно передавать эти теги и категории обработчику только английскими буквами и хотелось бы чтобы урл был хоть немного человекопонятный.
site.ru/?tag=avtomobili - сразу понятно что увидиш информацию, связянную с автомобилями site.ru/?tag=123ф24ф23 - ничерта не понятно. Вот что я имел в виду, говоря про ЧП А русские вызывают много проблем, - некоторые браузеры преобразуют кирилицу в крякозабру типа %35%34, да и ссылку сложно дать кому-то на форуме(например) если браузер корректно отображает кирилицу: http://site.ru/?tag=русское слово upd: Зачем каптча стоит после сообщения, если ее вводить необязательно
я делаю так: PHP: $stroka = strtolower($stroka); $stroka = trim($stroka); $trans = array ('а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ё'=>'yo', 'ж'=>'zh', 'з'=>'z', 'и'=>'i', 'й'=>'j', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p', 'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'х'=>'h', 'ц'=>'c', 'ч'=>'ch', 'ш'=>'sh', 'щ'=>'w', 'ы'=>'y', 'ю'=>'yu', 'я'=>'ya', 'ь'=>'', 'ъ'=>'', 'э'=>'a', ' '=>'', '('=>'_', ')'=>'_', '-'=>''); $alt = strtr($stroka, $trans);