Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Стандарт кодирования содержимого форм для передачи серверу

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите в каком rfc стандарте описаны правила, по которым броузеры кодируют содержимое html форм для передачи серверу через http ?
 
%XX
 
Вот на этом сайте собраны все rfc:
http://www.faqs.org/rfcs/
 
Сейчас пытаюсь разобраться в том как CGI.pm раскодирует данные запроса
и какие здесь могут быть подводные камни.

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 15:09 31-01-2004 | Исправлено: olsufr, 15:11 31-01-2004
xntx



хнотик-багоискатель
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
olsufr
какой там стандарт?
имхо, никаких тут подводных камней
% и две шестнадцатиричные цифры, они-же могут обозначить всю таблицу ASCII т.к. 16 * 16 = 256...

----------
Hello world!

Всего записей: 5169 | Зарегистр. 15-02-2003 | Отправлено: 15:41 31-01-2004
olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проделал такой эксперимент:
через форму в скрипт несколько раз передавал некоторый текст и выводил полученную и необработанную строку, при этом кодировка страницы с формой каждый раз была разная (вестерн, кирилица и utf-8).
 
Так вот каждый раз полученная строка была разной.
Т.е. получается, что броузер при кодировании учитывает кодировку страницы с формой?
(подозреваю, что вопрос этот чайника, но ответьте).
Тогда как скрипт должен раскодировать данные формы?
 
Добавлено
В CGI.pm для раскодирования содержимого форм используется такой код:

Код:
 
      $todecode =~ s/%(?: ([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))/
defined($1)? chr hex($1) : utf8_chr(hex($2))/ge;
 

 
Для чего нужен здесь такой шаблон ?: u([0-9a-fA-F]{4}
 
Судя по вызову подпрограммы utf8_chr(hex($2))
здесь раскодируется текст в utf-8.

Цитата:
имхо, никаких тут подводных камней  
% и две шестнадцатиричные цифры, они-же могут обозначить всю таблицу ASCII т.к. 16 * 16 = 256...

А как насчет этого?  
utf-8  -- это не ASCII с 256 символами
Ведь в форме могут одновременно присутствовать буквы из разных алфавитов с разными кодовыми ASCII таблицами.

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 15:53 31-01-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olsufr
Цитата:
Так вот каждый раз полученная строка была разной.  
Т.е. получается, что броузер при кодировании учитывает кодировку страницы с формой?  

браузеры они такие

Цитата:
Для чего нужен здесь такой шаблон ?: u([0-9a-fA-F]{4}  


Цитата:
Судя по вызову подпрограммы utf8_chr(hex($2))  
здесь раскодируется текст в utf-8.  

да, msie и opera7 при escape так с русским текстом обходится
 
сюда можешь взглянуть:
http://forall.ru-board.com/Svarga/ascii_hex_unicode_values.html

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 18:00 31-01-2004
olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga

Цитата:

Цитата:
Для чего нужен здесь такой шаблон ?: u([0-9a-fA-F]){4}

Цитата:
Судя по вызову подпрограммы utf8_chr(hex($2))  
здесь раскодируется текст в utf-8.  

да, msie и opera7 при escape так с русским текстом обходится  

Что-то здесь я никак не могу понять. Где я ошибаюсь?
Для пробы сделал скрипт, выводящий не раскодированный символ переданный POST запросом. Сама страница с формой в кодировке utf-8.
Впечатал русскую букву А.  
Она оказалась закодированной в таком виде: %D0%90
Использовался MSIE6.
Что-то я здесь не вижу формата, который ищет шаблон %u([0-9a-fA-F]{4})
 
 
 
Добавлено

Цитата:
да, msie и opera7 при escape так с русским текстом обходится  
В принципе я и ищу тот стандарт, который предписывает броузерам как правильно кодировать разные символы в http запрос. И конкретно меня интересует кодирование многоязычных строк когда страница с формой представлена в кодировке utf-8.  
 
Как кодируются те символы, которые не входят в ту кодовую таблицу в которой показана страница с формой?  
Например, эта форма представлена в кодировке Cyrillic(Windows) и как закодируются скажем немецкие или французские буквы в http запросе?
 
Буду благодарен за объяснение этих вопросов.

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 13:59 01-02-2004 | Исправлено: olsufr, 13:59 01-02-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olsufr

Цитата:
Как кодируются те символы, которые не входят в ту кодовую таблицу в которой показана страница с формой?  

Если страница в utf-8, то просто двубитные юникод-значения переводятся в url-encoded вид:
Цитата:
Впечатал русскую букву А.  
Она оказалась закодированной в таком виде: %D0%90  
это оно и есть.
 

Цитата:
Что-то я здесь не вижу формата, который ищет шаблон %u([0-9a-fA-F]{4})  

Опера 7 и MSIE представляют символы в таком виде при использовании escape(), для мозиллы придётся изголяться чтоб в такой вид привести —  
"символ".charCodeAt().toString(16), а затем вручную добавлять недостающее количество нулей в начале и символ процента подставлять...  
 

Цитата:
В принципе я и ищу тот стандарт, который предписывает броузерам как правильно кодировать разные символы в http запрос. И конкретно меня интересует кодирование многоязычных строк когда страница с формой представлена в кодировке utf-8.  

Стандарт? Не знаю...
 
По-моему, просто берётся символ и ищется в кодовой таблице, соответствующей данной кодировке, а затем его код переводится в 16-ричную запись (%FF), т.е. если страница в какой-нибудь в ISO-8859-2, то само собой, при вводе русских символов ерунда получится на выходе
Соответственно, если страница в uft-8, символы получаются в виде %D0%90, т.к. каждый символ представлен двубитной последовательностью.

Цитата:
Например, эта форма представлена в кодировке Cyrillic(Windows) и как закодируются скажем немецкие или французские буквы в http запросе?  

в соответствии с кодовой таблицей windows-1251, вроде как.

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 23:50 01-02-2004 | Исправлено: Svarga, 23:54 01-02-2004
olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:

Цитата:
Что-то я здесь не вижу формата, который ищет шаблон %u([0-9a-fA-F]{4})

Опера 7 и MSIE представляют символы в таком виде при использовании escape(),

Понятно. Т.е. ты имеешь ввиду, что код:
Код:
$todecode =~ s/%(?: ([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))/  
defined($1)? chr hex($1) : utf8_chr(hex($2))/ge;
предназначен и для тех случаев, когда на серверный скрипт отправляются символы предварительно перекодированные JavaScript'ом в форму %uXXXX. Но ведь в этом случае сам символ процента будет закодирован в %25 и все превратится в %25uXXXX и его уже не распознает шаблон %u([0-9a-fA-F]{4}) для последующей трансформации. Т.е. это верно для POST запроса, в случае же GET запроса броузер послушно передаст все что ему укажут.
 
В стандарте http 1.0 (rfc1945) сказано так:

Цитата:
The Request-URI is transmitted as an encoded string, where some characters may be escaped using the "% HEX HEX" encoding defined by RFC 1738 [4]. The origin server must decode the Request-URI in order to properly interpret the request.
И в нем нет ни слова про формат %uXXXX.
Тогда зачем создателям CGI.pm понадобился вышепроцитированный код?  
Может он используется не только для перекодирования POST и GET запросов, но и для каких-то других целей?
Я собираюсь использовать тот код для самостоятельного перекодирования POST и GET запросов в своих скриптах, поэтому мне важно найти ответ на эти вопросы.
 

Цитата:

Цитата:
Например, эта форма представлена в кодировке Cyrillic(Windows) и как закодируются скажем немецкие или французские буквы в http запросе?
в соответствии с кодовой таблицей windows-1251, вроде как.
Не уверен. Как ты тогда объяснишь то, что в этом форуме например при попытке вставить в свое сообщение скажем чисто немецкую букву получим ее в виде &#DDD; ?
Я знаю, что в скриптах блокируется символ амперсанда в регулярном выражении.
Но ведь в исходной строке немецкая буква та будет представлена все-таки в виде &#DDD;  ,  а не  % HEX HEX . Может быть это сам броузер, сочтя что немецкая буква не принадлежит кириллической кодировке, посылает ее уже в html-виде &#DDD; а не % HEX HEX как это было бы в случае русских и латинских букв.
Или я расфантазировался и это дело рук CGI.pm ?
Вот потому чтобы не было места для фантазий, я и искал единый интернет стандарт для всех броузеров.  

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 18:55 03-02-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olsufr

Цитата:
о ведь в этом случае сам символ процента будет закодирован в %25 и все превратится в %25uXXXX  

нет, попробуй в адресную строку в эксплорере или Опере 7 код забросить:
javascript:alert(escape('русский текст'))
+ enter
и увидешь сие —
"%u0440%u0443%u0441%u0441%u043A%u0438%u0439%20%u0442%u0435%u043A%u0441%u0442", т.е. такое получается, когда скриптом текст напрямую функцией escape переводится в url-encoded вид... Нормальный url-encoded текст (такой, как получается при отправке формы) получается при использовании escape только в Netscape'ах (в Мозилле вышеприведённый код не отрабатывается нормально в адресной строке, однако если его исполнить на странице — всё переводится в вид %FF) и Операх до 6-й, а в Операх 6+ и MSIE — все символы кроме basic latin (или как оно называется? — латинские буквы, цифры, знаки препинания) переводятся при использовании escape в вид %u0FF (при отправке же формы в обычный %FF-вид)
 

Цитата:
И в нем нет ни слова про формат %uXXXX. Тогда зачем создателям CGI.pm понадобился вышепроцитированный код?
Может он используется не только для перекодирования POST и GET запросов, но и для каких-то других целей?  

Это нестандартный формат, но он используется с 4-го MSIE вместо нормального при использовании escape
Хотя при отправке форм проблем не возникает (всё в виде %FF).
Цитата:
Не уверен. Как ты тогда объяснишь то, что в этом форуме например при попытке вставить в свое сообщение скажем чисто немецкую букву получим ее в виде &#DDD; ?
Я знаю, что в скриптах блокируется символ амперсанда в регулярном выражении.
Но ведь в исходной строке немецкая буква та будет представлена все-таки в виде &#DDD;  ,  а не  % HEX HEX.  

Скорее всего при получении формы здесь все символы, не входящие в определённый набор (а-я, А-Я, a-Z, 0..9, знаки препинания, может ещё что-то), переводятся в их числовой эквивалент (&#xxx;)...
 
Что-то я потерялся...
Запускаем сие, и какая бы кодировка не была выставлена для страницы, немецкая а-умлаут — — передаётся в виде вопросительного знака в Опере (именно передаётся, а не криво декодируется: скрипт получает %3F вместо %E4) , хотя в MSIE при utf-8 передаётся %C3%A4, при windows-1251 — %26auml%3B... т.е. MSIE передаёт то, что надо, а Опера что-то не то...
Сорри, завтра утром вернусь к этому делу на свежую голову, попробую разобраться с этим...


----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 20:00 04-02-2004 | Исправлено: Svarga, 20:09 04-02-2004
olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga, спасибо, понял.
 

Цитата:

Цитата:
Как ты тогда объяснишь то, что в этом форуме например при попытке вставить в свое сообщение скажем чисто немецкую букву получим ее в виде &#DDD; ?  
Я знаю, что в скриптах блокируется символ амперсанда в регулярном выражении.  
Но ведь в исходной строке немецкая буква та будет представлена все-таки в виде &#DDD;  ,  а не  % HEX HEX .
 
Скорее всего при получении формы здесь все символы, не входящие в определённый набор (а-я, А-Я, a-Z, 0..9, знаки препинания, может ещё что-то), переводятся в их числовой эквивалент (&#xxx;)...  
В кодах iB такого перевода нет. Скорее всего это дело рук CGI.pm , вот только где?
 
 

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 20:22 04-02-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Касательно стандартов кодирования данных HTML-форм:
Form content types:
application/x-www-form-urlencoded:

Цитата:
Control names and values are escaped. Space characters are replaced by `+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by `%HH', a percent sign and two hexadecimal digits representing the ASCII code of the character. Line breaks are represented as "CR LF" pairs (i.e., `%0D%0A').
The control names/values are listed in the order they appear in the document. The name is separated from the value by `=' and name/value pairs are separated from each other by `&'.

multipart/form-data:

Цитата:
a "Content-Disposition" header whose value is "form-data".
a name attribute specifying the control name of the corresponding control. Control names originally encoded in non-ASCII character sets may be encoded using the method outlined in [RFC2045].


----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 20:25 04-02-2004
olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А какая разница в использовании (при декодировании)
между pack("C", hex($1))  и  chr(hex($1))  ?
 

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 20:26 04-02-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olsufr

Цитата:
В кодах iB такого перевода нет. Скорее всего это дело рук CGI.pm , вот только где?  

завтра утром потестю-посмотрю...
 
Добавлено

Цитата:
В кодах iB такого перевода нет. Скорее всего это дело рук CGI.pm , вот только где?  

ага... в стандартной Ib2 всё зависит от браузера:
если Оперой передавать и для страницы выставлена windows-1251, передаётся ?, если MSIE с windows-1251 — ä, с  ISO-8859-1 — передаётся нормальная а-умлаут, насколько я понял в виде %ff, потому как, если страницу темы, куда постился пост с а-умлаут смотреть в win-1251 — она отображается как русская д, если в западноевропейских кодировках — как а-умлаут...
 

Цитата:
А какая разница в использовании (при декодировании)  
между pack("C", hex($1))  и  chr(hex($1))  ?  

$character   = chr(101);
 
$word = pack("C*", 115, 97, 109, 112, 108, 101);
$word = pack("C*",@ascii_codes);
 
т.е. chr — только одно число в символ переводит, а pack C — все переданные коды символов
 
Добавлено
точнее просто pack("C", число) ничем не отличается от chr(число)...
C* — для всех переданных чисел, C2 — для двух и т.п.
 
Добавлено
Svarga

Цитата:
 какая бы кодировка не была выставлена для страницы, немецкая а-умлаут — ? — передаётся в виде вопросительного знака в Опере

Дошло без "свежей головы" и "завтра" ) — у меня в настройках Оперы было выставлено использовать для всех страниц windows-1251, отсюда и беды с эксперементами
отключил — нормально при iso-8859-2 а-умлаут кодируется как %E4, при utf-8 — как %C3%A4... а вот при кириллических кодировках ? отправляется...  
Mozilla при windows-1251 вместо а-умлаут отправляет %26%23228%3B, т.е. ä...  
 
Стало быть: при отправке среди данных формы символов, отсутсвующих в кодовой таблице страницы, на которой находится форма, Опера вместо них отправляет вопросительные знаки, MSIE и Mozilla — представляют их как ä или &#XXX;, а в Netscape 4 их вообще нельзя ввести в поля формы, напр., пытаемся в NN4 ввести в форму на win-1251-странице — вместо неё печатается русская д

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 20:29 04-02-2004
olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Понятно.

Цитата:
Стало быть: при отправке среди данных формы символов, отсутсвующих в кодовой таблице страницы, на которой находится форма, Опера вместо них отправляет вопросительные знаки, MSIE и Mozilla — представляют их как ä или &#XXX;, а в Netscape 4 их вообще нельзя ввести в поля формы, напр., пытаемся в NN4 ввести в форму на win-1251-странице ä — вместо неё печатается русская д  
Точно. У меня такой же результат. Только я б дополнил его и сформулировал бы так:
 
Как броузеры кодируют (при передаче на сервер) символы, не входящие в ту кодовую ASCII таблицу, в которой представлена страница с формой:
 
IE6, Netscape7, Mozilla - передают десятичный код этого символа в HTML (&#DDD;), а именно
                           %26%23DDD%3B
                           где %26 это & (амперсанд)  
                                 %23 это  # (решетка)
                                 %3B это  ; (точка с запятой)
                                 DDD - десятичный код символа
 
 
Opera, Netscape6 - не утруждают себя этим и вместо такого символа просто передают вопросительный знак, а именно %3F
Большинство почтовых клиентов поступают также.
 
И связано это с тем, что в стандартах не определено нужное действие, вот каждый броузер и решает эту задачку по своему.  Но к чести броузеров IE, Netscape7, Mozilla надо сказать, что они ведут себя услужлевее по отношению к информации пользователя.
 
Теперь что касается форума, его скрипты в целях защиты знак амперсанда заменяют на & вот вместо символа и появляется &#DDD;
 

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 16:41 05-02-2004 | Исправлено: olsufr, 17:07 05-02-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olsufr

Цитата:
IE6, Netscape7, Mozilla - передают десятичный код этого символа в HTML (&#DDD;), а именно  

у меня MSIE передаёт те символы, на которые есть entities, именно в виде entities, а не кодами: ä и т.п.
Цитата:
Netscape6 - не утруждают себя
NN4, а не 6... шестой — это то же, что и Мозилла 0.7... Там всё нормально.
 


----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 17:11 05-02-2004 | Исправлено: Svarga, 17:13 05-02-2004
olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga
Прежде чем сказать я же все проверил.

Цитата:
у меня MSIE передаёт те символы, на которые есть entities, именно в виде entities, а не кодами: ä и т.п.
А у меня отправил в десятичных кодах. Я ничего специально для этого не настраивал - все настройки стоят как по умолчанию. Может это ты у себя что-то настроил?
 
Netscape6.2.3 (Win32) - точно посылает вопросительные знаки.
Mozilla1.02 и Mozilla1.5 проверял - все ок.
А вот насчет Mozilla 0.7 не знаю.
 
 
Добавлено
Проверил сейчас для Mozilla 0.7 - она также как и Netscape 6 и Opera отправляет вопросительные знаки.
 

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 17:21 05-02-2004 | Исправлено: olsufr, 18:35 05-02-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olsufr
 
Разобрался, по-моему на этот раз окончательно Итак:
 
В Netscape 4.x невозможно даже ввести в поля формы символы, не входящие в кодовую таблицу страницы с формой — они заменяются на соответствующие им по ASCII-коду символы кодовой таблицы страницы.
 

Цитата:
Netscape6.2.3 (Win32)

сорри, ошибся (ох уж эти одинаковые интерфейсы у всех Мозилл, надо заменить, чтоб не путаться!).
Mozilla версии выше 0.7 ниже 1.0 при отправке данных формы ведёт себя следующим образом: если в тексте, введённом в поле формы, встречаются символы, не входящие в кодовую таблицу данной страницы, то значение данного поля усекается от начального символа по первый символ, отсутствующий в кодовой таблице даннной страницы (с удивлением обнаружил в Mozilla 0.9), например: отправляем со страницы в windows-1252 в текстовом поле последовательность wfqЫwwфw — браузер отправляет только wfq.
 
Mozilla же версий 1.0 и выше отправляет всё как описано в предыдущих постах (1.0+ соответствуют Netscape 7+).
 
MSIE 4: отправляет символы, отсутствующие в кодовой таблице данной страницы, в виде %26%23XXXX%3B, т.е. &#XXXX;, однако при отправке латинских диакритизированных алфавитных символов со страницы, в кодовую таблицу которой они не входят, вместо латинских алфавитных символов с диакретическими знаками отправляются соответствующие им алфавитных символы без диакритических знаков, т.е. вместо a-umlaut со страницы в windows-1251 будет отправлена простая латинская a.
 
MSIE 5.0 и 5.5 подобно MSIE 4.0 отправляют символы, не входящие в кодовую таблицу страницы, на которой расположена форма, в виде %26%23XXX%3B (&#XXX;), где XXX — десятичный код данного символа, однако при этом латинские алфавитные символы с диакритическими знаками заменяются при отправке из MSIE 5.0 и 5.5 не на их десятичные коды (как это происходит в Mozilla 1+ и MSIE 6+) и не на соответствующие символы без диакритических знаков (как это происходит в MSIE 4), а на entities, напр. при отправке a-umlaut со страницы в windows-1251 MSIE 5.0 и 5.5 отправляют не %26%23228%3B (ä), как это делают браузеры Mozilla 1.0+ и MSIE 6+, a %26auml%3B, т.е. ä
 
MSIE 6 при отправке символов, не входящих в кодовую таблицу данной страницы, не использует для диакритизированных латинских алфавитных символов их entities, а отправляет аналогично Mozilla1+ десятичные коды символов в виде &#XXX; (%26%23xxx%3B).
 
 
 
фух...
 
<малость подправил>

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 23:41 05-02-2004 | Исправлено: Svarga, 01:19 06-02-2004
olsufr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga, хороший справочник получился.
Только в нем Оперы не хватает, но у нее и 6 и 7-ая версии ведут себя одинаково:
Цитата:
Opera, Netscape 6 - не утруждают себя этим и вместо такого символа просто передают вопросительный знак, а именно %3F

 
Off:  
А мораль такова: когда для броузеров нет стандарта, каждый изголяется на свой лад, что приводит к анархии.
 

Всего записей: 363 | Зарегистр. 07-08-2002 | Отправлено: 14:38 06-02-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olsufr

Цитата:
Только в нем Оперы не хватает, но у нее и 6 и 7-ая версии ведут себя одинаково:
Цитата:
Opera, Netscape 6 - не утруждают себя этим и вместо такого символа просто передают вопросительный знак, а именно %3F

+ Оперы 3.х и 5.х ведут себя аналогично Netscape 4.
Цитата:
В Netscape 4.x невозможно даже ввести в поля формы символы, не входящие в кодовую таблицу страницы с формой — они заменяются на соответствующие им по ASCII-коду символы кодовой таблицы страницы.

 

Цитата:
Off:  
А мораль такова: когда для броузеров нет стандарта, каждый изголяется на свой лад, что приводит к анархии.  

Дополнение к морали: для страницы сайта с контактной формой единственно возможная кодировка utf-8, иначе не исключена частичная или полная потеря отправляемой информации

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 15:31 06-02-2004
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
по поводу проблем с кириллическими символами в виде %u0FFF вместо %FF при использовании escape() в MSIE и Opera7:
для алфавитных кириллических символов вместо escape() можно использовать, например, такую функцию:

Код:
var alf='АаБбВвГ㥴ДдЕеЄєЖжЗзИиІіЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя'.split('')
var alfP=['C0','E0','C1','E1','C2','E2','C3','E3','A5','B4','C4','E4', 'C5','E5','AA','BA','C6','E6','C7','E7','C8','E8','B2','B3','C9','E9','CA','EA','CB','EB','CC','EC','CD', 'ED','CE','EE','CF','EF','D0','F0','D1','F1','D2','F2','D3','F3','D4','F4','D5','F5','D6','F6','D7','F7','D8','F8','D9','F9','DA', 'FA','DB','FB', 'DC','FC','DD','FD','DE','FE','DF','FF']
 
function cyrEsc(Str){
   for(var i=0;i<alf.length;i++){
      var tmp=eval('/'+alf[i]+'/g')
         while(tmp.test(Str)){Str=Str.replace(tmp,'%'+alfP[i])}
         }
   return Str
   }

(довелось вот с такой проблемой тоже столкнуться)
 
Добавлено

Цитата:
  

глюк какой-то
стало быть функция расположена здесь

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 02:27 24-02-2004 | Исправлено: Svarga, 04:25 04-08-2004
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Стандарт кодирования содержимого форм для передачи серверу


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru