Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с транслитерацией 
V
    Опции темы
console
Дата 2.7.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



Сценарий следующий:
парсер RSS-потока генерирует страницу со списком заголовков новостей...
Также у меня есть функция, которая занимается транслитом переданной ей строки:

Код

function translit($str)
{
    $transtable = array();
    $transtable = array(
        'А' => 'A',
        'Б' => 'B',
        'В' => 'V',
        'Г' => 'G',
        'Д' => 'D',
        'Е' => 'E',
        'Ё' => 'Yo',
        'Ж' => 'Zh',
        'З' => 'Z',
        'И' => 'I',
        'Й' => 'Y',
        'К' => 'K',
        'Л' => 'L',
        'М' => 'M',
        'Н' => 'N',
        'О' => 'O',
        'П' => 'P',
        'Р' => 'R',
        'С' => 'S',
        'Т' => 'T',
        'У' => 'U',
        'Ф' => 'F',
        'Х' => 'H',
        'Ц' => 'Ts',
        'Ч' => 'Ch',
        'Ш' => 'Sh',
        'Щ' => 'Shch',
        'Ъ' => '',
        'Ы' => 'I',
        'Ь' => '',
        'Э' => 'E',
        'Ю' => 'Yu',
        'Я' => 'Ya',
        'а' => 'a',
        'б' => 'b',
        'в' => 'v',
        'г' => 'g',
        'д' => 'd',
        'е' => 'e',
        'ё' => 'yo',
        'ж' => 'zh',
        'з' => 'z',
        'и' => 'i',
        'й' => 'y',
        'к' => 'k',
        'л' => 'l',
        'м' => 'm',
        'н' => 'n',
        'о' => 'o',
        'п' => 'p',
        'р' => 'r',
        'с' => 's',
        'т' => 't',
        'у' => 'u',
        'ф' => 'f',
        'х' => 'h',
        'ц' => 'ts',
        'ч' => 'ch',
        'ш' => 'sh',
        'щ' => 'shch',
        'ъ' => '',
        'ы' => 'i',
        'ь' => '',
        'э' => 'e',
        'ю' => 'yu',
        'я' => 'ya');
        
    $str = strtr($str, $transtable);
    return $str;
}


Далее выводим заголовки в исходном "русском" виде, и в транслированном:

Код

for($p = 0; $p<count($items); $p++)
    {
        echo "<b>$p</b><br>" . $items[$p]['title'] . "<br>";
        $tempvar = $items[$p]['title'];
        $tempvar = translit($tempvar);
        echo "<hr>" . $tempvar . "<hr>";
    }


При выводе русского текста проблем не возникает... при транслитерации выдает кракозяблы.......
Код

Новая система координат вводится в действие в России<hr>
R�R�R�R�S� S�RyoS�S�R�R�R� R�R�R�S�R�RyoR�R�S� R�R�R�R�RyoS�S�S� R� R�R�R�S�S�R�RyoR� R� R�R�S�S�RyoRyo


Если передать в translit('Дом, милый дом'):
Код

echo translit('Дом, милый дом')


Код

Dom, miliy dom


Почему translit некорректно транслирует поступающие данные из массива $items... (данные в массиве в кодировке UTF-8) ?


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
Golda
Дата 2.7.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



Проаерьте:
1) в какой кодировке файл в функцией translit()
2) в какой кодировке приходят данные в массив $items
3) что сервер сообщает броузеру и что броузер думает о кодироваке результата



--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
console
Дата 2.7.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



Файл с функцией translit() инклудится в основной файл main.php, где выполняются все действия... Как проверить кодировку файла не знаю.
В массив $items данные приходят в UTF-8 (т.к. в функции xml_parser_create() явно указал  xml_parser_create("utf-8") )


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
ksnk
Дата 2.7.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



А в какой кодровке написана функция translit? Мне почему-то кажется , что в win-1251
Соответстявенно, чтобы пользоватся этой функцией - надо перекодировать исходный UTF-8 в кодировку translit'а. 
Можно внимательно почитать ро iconv и его переметр //TRANSLIT . возможно, городить свою функцию и не надо.
Можно посмотреть на mb_* функции и переписать сам translit. Хотя это может оказаться на совсем тривиально, так как функции mb_strtr нет :(
 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
console
Дата 2.7.2007, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



ksnk, каким образом можно переписать функцию в кодировке UTF-8?


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
console
Дата 2.7.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



Выше я упоминал, что русские заголовки без проблем выводились на экран, однако при попытке создать файл с этим именем, получаются непонятные названия типа: Ibm-создает-петафлопный-суперкомпьютер


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
console
Дата 2.7.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



Проблема полностью решена... перед созданием файла необходимо было преобразовать имя из UTF-8 в WINDOWS-1251 функцией iconv()

Это сообщение отредактировал(а) console - 2.7.2007, 12:54


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
ksnk
Дата 2.7.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(console @  2.7.2007,  10:42 Найти цитируемый пост)
каким образом можно переписать функцию в кодировке UTF-8? 

Вопрос все еще актуален? 
Цитата(console @  2.7.2007,  12:53 Найти цитируемый пост)
преобразовать имя из UTF-8 в WINDOWS-1251

Можно попробовать вот так
iconv('UTF-8', 'ASCII//TRANSLIT',$s);

Это сообщение отредактировал(а) ksnk - 2.7.2007, 14:10


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
console
Дата 2.7.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



ksnk, спасибо, все работает...
функция translit() тоже работает...


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.