Заметки о вёрстке сайтов  ·  Александр Шуркаев об HTML, CSS и JavaScript (скрипты, справочники и примеры по сайтостроению)

Особенности функции escape()

19 января 2002 г.

Издревле встроенная функция escape() применяется для перекодирования строк таким образом, чтобы они могли быть прочтены на любом компьютере. Всё бы замечательно, но тут возникает проблема. Связана она с тем, что разные браузеры по-разному кодируют строки, в которых попадаются non-ASCII символы.

Издревле встроенная функция escape() применяется для перекодирования строк таким образом, чтобы они могли быть прочтены на любом компьютере. Особенно использовать эту функцию необходимо для передачи параметров между страницами (методом GET) или для установки cookie.

Всё бы замечательно, но тут возникает проблема. Связана она с тем, что разные браузеры по-разному кодируют строки, в которых попадаются non-ASCII символы. Internet Explorer 4+, например, переводит русские буквы в UNICODE формат (%uxxxx), тогда как все остальные браузеры используют для этого обычный формат — %xx.

В результате получается так, что результирующая строка может быть некорректно распознана. Наглядный пример:

Что будет, если перевести слово результат в escape-последовательность (функция escape()), а потом в «нормальный» вид (функция unescape())? Посмотрите!

Окей, во всех браузерах всё работает нормально. А теперь возьмём перекодированную строку из NN4.x или Opera (т. е. без UNICODE) — строку, кстати, можно взять и из GET-запроса (она будет одинакова для всех браузеров, никаких тебе %uxxxx, а только %xx) — и попробуем преобразовать её обратно с помощью IE4+. Получаем следующую абракадабру. В других браузерах перекодировка произойдёт нормально.

Вечно Miscrosoft хочет как лучше, а получается как всегда…

P. S. Решение.

Хитовые статьи про разработку сайтов

Рассылка новостей и новых статей

Сообщения будут приходить пару раз в неделю, не чаще

Объявления

iligroup.ru процент выплат в игровом автомате
LiveInternet