![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
AlexPet |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: 1 Всего: 1 |
Добрый день!
Пытаюсь разобраться с utf-8 применительно к шаблонизатору HTML::Template Итак, имеем: файл шаблона содержит символы в кодировке utf-8 1) Если вызывать $htmltmpl->output() без передачи в шаблон параметров (либо с передачей параметров, не содержащих утф8-символы), то отображается все как надо 2) Если же передавать параметры, содержащие символы в кодировке utf-8, то на выходе получаем: а) кразобляки в тех местах, где в шаблоне юникод б) нормальные символы там, где были переданы параметры юникодные Пробовал всяческие комбинации с use open :utf8; binmode STDOUT, ":utf8"; utf8::*. Не получилось. Нашел в интернете решение ( http://www.mail-archive.com/html-template-...t/msg02273.html ), которое сводится к следующему:
(можно конечно открывать файл самому темплейта, и при открытии указывать '<:utf8', а затем передавать его через filehandle => $fh, но это совсем некрасиво) Вопрос: можно ли как-то изящнее решить данную проблему? P.S. Сам я только начал работать с UTF-8, могу упустить какое очевидное решение ![]() P.P.S. А warning в названии - это при использовании Encode::decode_utf8 вместо utf8::decode получался ![]() Это сообщение отредактировал(а) AlexPet - 12.8.2008, 12:44 |
|||
|
||||
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
AlexPet, ммм даж не знаю поможет или нет, но просто
не пробовали ?? ![]() -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
AlexPet |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: 1 Всего: 1 |
Конечно пробовал
![]() без толку. Пока нашел два решения (либо подключать темплейт как файловый дескриптор с указанием utf8 на open, либо через фильтр к темплейту.. об этом я, впрочем, написал выше) Это сообщение отредактировал(а) AlexPet - 18.8.2008, 08:41 |
|||
|
||||
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
Не совсем понял, т.е. в теории кодировка одна и та же, что в шаблоне, что у передаваемых параметров - utf8, но отображается по разному?? -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый AlexPet, есть еще пара вариантов:
1. Попробовать
2. Создать дочерний класс HTML::Template::Unicode, в котором переопределить функцию open():
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
AlexPet |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: 1 Всего: 1 |
Bulat, в теории да, но HTML::Template использует хитрый алгоритм (который описан по ссылке выше):
ginnie, по этой же причине не будет работать и первый предложенный Вами метод (поскольку модуль сам осуществляет перекодировки, и не всегда правильно). За второй метод спасибо, возьму на заметку, если нужно будет использовать в серьезном проекте. Пока что быстро слабал на коленке через фильтр ![]() Очень странно, что до сих пор не закоммитили предложенное изменение в этот модуль. Все-таки проблема известная, и патч был предложен для ее решения (опять же по ссылке в моем первом посте)... Всем спасибо за обсуждение, тему помечаю как решенную (будем ждать новых релизов хтмл::темплейт ;) ) |
|||
|
||||
Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Я так понимаю, если шаблон берется не из файла (из базы например) то этой проблемы не возникает?
|
|||
|
||||
AlexPet |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: 1 Всего: 1 |
Не совсем понял, что значит из базы (шаблон можно брать либо из файла, либо из файлового манипулятора), но решение в случае с файловым манипулятором я привел выше (через указание кодировки на поток)
|
|||
|
||||
Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Ну вот собственно как-то так:
где переменная $ref_to_template_text или $ref_to_array_of_lines содержит текст шаблона. А браться он может откуда угодно. Хоть динамически генерироваться. Это сообщение отредактировал(а) Ramirez - 22.8.2008, 11:39 |
|||
|
||||
Vavilen |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.1.2009 Репутация: нет Всего: нет |
Мне очень помогло Ваше решение! Спасибо! |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |