(не)русские буквы в javascript-окнах
Захотелось сделать проверку заполнения обязательных полей в почтовой форме (той, которая обычный элемент контента).
Проверка-то происходит, да вот сообщение о незаполненных полях выдается кракозябрами (типа Iacaaiea oo?a eee no?aia: Aaoa)(не знаю, отобразятся ли они здесь; вообще это всякие буквы латинницы с умляутами и прочими диакритическими(?) знаками). На текущий момент накопал вот чего: Обработка объекта FORM происходит в "tslib/class.tslib_content.php" . Там есть строки типа rawurlencode($conf["goodMess"]). Функция rawurlencode "возвращает строку, в которой все не-алфавитные символы, кроме: "-" "_" и "." будут заменены знаком процента (%), с двумя символами за ним. Это кодировка, описанная в RFC 1738 для защиты не-буквенных символов от интерпретирования.". В результате образуется строка вида "%D2%C4%E0%F2%E0%20%EE" (программа перекодировщик "Штирлиц" называет такую кодировку "Q.P. Percent". msIE такого не понимает, по крайней мере, в javascript-окошках. Точнее, он не понимает, что это символы в кодировке win. Кстати, rawurlencode встречается в большой части кода typo3. Видимо, здесь же причина кракозябров в русифицированом бэкенде. Мысль такая: заменить rawurlencode своей функцией, которая будет перекодировать в "Q.P. Percent" только те символы, которые реально нужно прекодировать, а русские буквы оставлять без изменений. Либо перекодировать все, но не с помощью rawurlencode, не в "Q.P. Percent", а в другим способом. Гораздо лучше, например, работают варианты "Q.P. html numeric" ( йцу ) или "Q.P. java" ( u0439u0446u0443u043Au0435u043D ), они описывают символ в юникодовой таблице, так что браузер не сможет перепутать кодировку. Ух, устал писать.. Завтра еще посмотрю.. |
Так как же всетаки быть?
Может действительно заменить rawurlencode своей функцией, что-то типа: function TYPO3_rawurlencode($string) { $hex=\"\"; $retstr = \"\"; for ($i=0; $i < strlen($string) ;$i++) { $char = $string[$i]; if(ord($char) < 193 || ord($char) > 241) $retstr .= rawurlencode($char); else $retstr .= $char; } return $retstr; } |
Господа! читайте новости на главной странице этого сайта.
Проблема решена - скачиваейте экстеншен. Если вдруг нужно чтобы код формы был валидный XTHML transitional - тогда этот экст нужно пропатчить. |
Я его поставил. Да вот отношения к моей проблеме он как мне кажется не имеет.
Я решил установить модуль Front End User Admin Как описывается в документации. Так вот при регистрации нового пользователя при повторной загрузке формы регистрации в полях Личная информация например Логин, Адрес данные отображаются кракозябрами. Я так понял что параметр в форму передается через JavaScript, а именно updateForm('fe_users_form','FE[fe_users][address]',unescape('Ленина%2050')) при этом строка 'Ленина%2050' формируется с использованием php функции rawurlencode. Или я что-то не понимаю? |
Что-бы было поняно:
Строка в примере формируется функцией TYPO3_rawurlencode($string), а следовательно отображается правильно 'Ленина%2050' (только пробел заменен на %20) |
re: (не)русские буквы в javascript-окнах
Я тоже инсталировал Extension "onet_correctform" вроде как бы помогло но не совсем :(
Если я прописываю сообщение прямо в файл "t3lib/jsfunc.validateform.js" тогда изображение правильное но если я обрабатываю сообщение через Setup, например как указано ниже или через Constant Editor тогdа сообщение о незаполненных полях выдается также кракозябрами! А это важно для многоязычного сайта :neutral: Может ктонибуть уже с этим сталкивался? Может еще надо чтото вписать в Setup? Установленый Charset = windows-1251 Контактформа здесь: http://pdkprint.ru/index.php?id=31 Цитата:
|
re: (не)русские буквы в javascript-окнах
Ещё возникает другая проблема после инсталяции exctension "onet_correctform" не работает проверка E-mail.
например Цитата:
|
re: (не)русские буквы в javascript-окнах
Всем привет.
Тема остается открытой, как я понимаю. Я установил этот onet_correctform - ничего не изменилось. Надпись об ошибке как была иероглифами, так и осталась. МОжет его как-то настроить надо? В новом репозитории этого ext нет... Описания никакого найти не могу. Может кто сталкивался с подобной проблемой? |
re: (не)русские буквы в javascript-окнах
Я зделал пару следующих изменений в файле typo3conf/ext/onet_correctform/class.ux_tslib_cObj.php и теперь все как бы работает, но я не знаю, не повлияют ли эти изменение негативно?!
Образец на: Полиграфические услуги Полиграфический Дом [Коммерсантk Однако еще есть маленькая проблема:Проблема состоит в том, что если я меняю выдающее сообщение через Template-Constant-Editor или через Setup, эти изменения не влияют. Только если я редактирую эти сообщения прямо в файле t3lib/jsfunc.validateform.js, изменения действуют. Код:
switch((string)$modeParameters[0]){ Код:
if ($conf['REQ']){ |
/**
* Apache 2.0.49 * PHP 4.3.4 * Mysql 4.0.18 * Typo3 4.0 */ Копал сам, вот что нашел. Проблема имеет место при кодировке UTF-8. В файле typo3/sysext/cms/tslib/class.tslib_content.php, формируется текст обработчика события onsubmit() формы так (строка 2027): Код:
$validateForm=' onsubmit="return validateForm(\''.$formname.'\',\''.implode(',',$fieldlist).'\','.t3lib_div::quoteJSvalue($conf['goodMess']).','.t3lib_div::quoteJSvalue($conf['badMess']).','.t3lib_div::quoteJSvalue($conf['emailMess']).')"'; Едем дальше. JavaScript функция validateForm(theFormname,theFieldlist,goodMess,bad Mess,emailMess) в файле t3lib/jsfunc.validateform.js принимает эту строку в качестве параметра theFieldlist, и декодирует ее функцией unescape(). Цитата:
Какая функция javascript раскодирует urlencoded строку и примет во внимание utf-8? Или может я не в том направлении копать начал? |
Часовой пояс GMT +4, время: 06:00. |
Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot