JavaScript: Какие символы не кодируются с помощью encodeURIComponent? - PullRequest
5 голосов
/ 07 июня 2011

Я пишу свою собственную функцию на другом языке, и я хочу, чтобы она давала идентичные результаты, если это возможно.

Ответы [ 2 ]

9 голосов
/ 07 июня 2011

Вы можете найти информацию в документации MDC :

encodeURIComponent экранирует все символы, кроме следующих:
буквенные, десятичные цифры, - _ . ! ~ * ' ( )

5 голосов
/ 07 июня 2011

Короткий ответ, вы можете сопоставить все кодовые единицы UTF-16 encodeURIComponent будет кодироваться с использованием следующего:

/[^a-zA-Z0-9\-_.!~*'()]/g

, хотя в спецификации говорится, что он обрабатывает дополнительные кодовые точки с 4-байтовым UTF-8кодировки.

Длинный ответ, ES 262 говорит:

15.1.3.4 encodeURIComponent (uriComponent)

Функция encodeURIComponent вычисляет новую версию URI, в которой каждый экземплярнекоторых символов заменяется одной, двумя, тремя или четырьмя escape-последовательностями, представляющими кодировку UTF-8 символа.Когда функция encodeURIComponent вызывается с одним аргументом uriComponent, предпринимаются следующие шаги:

  1. Пусть componentString будет ToString (uriComponent).

  2. LetunescapedURIComponentSet быть строкой, содержащей один экземпляр каждого символа, действительный в uriUnescaped .

  3. Возвращать результат вызова Encode (componentString, unescapedURIComponentSet)

И uriUnescaped определяется следующим образом:

uriUnescaped ::: uriAlpha |Десятичная цифра |uriMark

где

uriAlpha ::: один из abcdefghijklmnopqrstu vwxyz ABCDEFGHIJKLMNOPQRSTU VWXYZ

uriMark ::: один из _.!~ * '()

DecimalDigit ::: один из 0 1 2 3 4 5 6 7 8 9

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...