escaping special character in a url
I am using a url to open a html page, and i am sending data in querystring withe the page url.
For example: abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue
![]()
2 Answers 2
You have 3 options:
But in your case, if you want to pass a url into a GET parameter of other page, you should use escape or encodeURIComponent, but not encodeURI.
![]()
To be safe and ensure that you’ve escaped all the reserved characters specified in both RFC 1738 and RFC 3986 you should use a combination of encodeURIComponent, escape and a replace for the asterisk(‘*’) like this:
[Explanation] While RFC 1738: Uniform Resource Locators (URL) specifies that the *, !, ‘, ( and ) characters may be left unencoded in the URL,
Thus, only alphanumerics, the special characters «$-_.+!*'(),», and reserved characters used for their reserved purposes may be used unencoded within a URL.
RFC 3986, pages 12-13, states that these special characters are reserved as sub-delimiters.
reserved = gen-delims / sub-delims
Also while some websites have even identified the asterkisk(*) as being a reserved character under RFC3986, they don’t include it in their URL component encoding tool.
экранирование специального символа в URL
Я использую url для открытия html-страницы, и я отправляю данные в querystring с URL-адресом страницы.
2 ответа
У вас есть 3 варианта:
Но в вашем случае, если вы хотите передать URL-адрес в параметр GET другой страницы, вы должны использовать escape или encodeURIComponent, но не encodeURI.
Чтобы быть в безопасности и убедиться, что вы избежали всех зарезервированных символов, указанных в RFC 1738 и RFC 3986, вы должны использовать комбинацию encodeURIComponent, escape и замену для звездочки (‘*’) следующим образом:
[Пояснение] Хотя RFC 1738: Uniform Resource Locators (URL) указывает, что символы *. ‘, (И) могут оставаться незакодированными в URL-адресе,
Таким образом, только буквенно-цифровые символы, специальные символы «$ -_. +! * ‘(),» и зарезервированные символы, используемые для их зарезервированных целей, могут использоваться unencoded в URL.
RFC 3986, стр. 12-13, говорится, что эти специальные символы зарезервированы как субграничники.
sub-delims = «! «/» $»/» & «/» ‘ «/» ( «/» )» /»* «/» + «/», «/»; «/» http://qaru.site/questions/219410/javascript-string-replace-with-regular-expression-and-function-as-arguments» title=»См. Вопрос о стеке перекрытия на» rel=»nofollow noreferrer»> второй параметр для первой замены ( ) вызов функции. Как используется здесь, замените вызовы функцией escape() один раз для каждого соответствующего специального символа!, ‘, (Или), и escape просто возвращает» escape-последовательность» для этого символа для замены, который повторно собирает любые экранированные символы с другим фрагменты.]
Кроме того, хотя некоторые веб-сайты даже идентифицировали asterkisk (*) как зарезервированный символ в RFC3986, они не включают его в их средство кодирования URL-компонентов.
экранирование специального символа в URL-адресе
Я использую URL-адрес, чтобы открыть html-страницу, и я отправляю данные в строке запроса с URL-адресом страницы.
задан 27 мая ’12, 07:05
2 ответы
У вас есть опции 3:
Но в вашем случае, если вы хотите передать URL-адрес в параметр GET другой страницы, вы должны использовать escape или encodeURIComponent, но не encodeURI.
ответ дан 27 мая ’12, 07:05

Спасибо Йогеш, подскажите, пожалуйста, как использовать эти методы в javascript. могу ли я вызвать эти методы, например URL.escape(); — ARV
escape устарел. Не используйте его. — Квентин
Чтобы быть в безопасности и убедиться, что вы экранировали все зарезервированные символы, указанные как в RFC 1738, так и в RFC 3986, вы должны использовать комбинацию encodeURIComponent, escape и заменить звездочку (‘*’) следующим образом:
[Объяснение] В то время как RFC 1738: Унифицированные указатели ресурсов (URL) указывают, что символы *, !, ‘, ( и ) могут быть оставлены незакодированными в URL-адресе,
Таким образом, только буквенно-цифровые символы, специальные символы «$-_.+!*'(),» и зарезервированные символы, используемые для их зарезервированных целей, могут использоваться незакодированными в URL-адресе.
В RFC 3986, стр. 12-13, указано, что эти специальные символы зарезервированы в качестве подразделителей.
зарезервировано = общие / частичные разделители
gen-delims = «:» / «/» / «?» / «#» / «[» / «]» / «@»
подразделы = «!» / «$» / «&» / «‘» / «(» / «)» / «*» / «+» / «,» / «;» знак равно
Функция escape() устарела, но может использоваться для URL-кодирования восклицательного знака, одинарной кавычки, левой и правой скобки. И поскольку существует некоторая двусмысленность в отношении того, должна ли звездочка быть закодирована в URL-адресе, и это не помешает закодировать, вы можете явно закодировать, используя что-то вроде вызова функции replace(). [Обратите внимание, что функция escape() передается как второй параметр для первого вызова функции replace(). Как используется здесь, replace вызывает функцию escape() один раз для каждого совпавшего специального символа !, ‘, ( или ), а escape просто возвращает «escape-последовательность» для этого символа обратно для замены, которая повторно собирает любые экранированные символы с другим фрагменты.]
Кроме того, хотя некоторые веб-сайты даже определили звездочку (*) как зарезервированный символ в соответствии с RFC3986, они не включают его в их инструмент кодирования компонента URL.
Экранирование, специальные символы
Как мы уже видели, обратная косая черта \ используется для обозначения классов символов, например \d . Это специальный символ в регулярных выражениях (как и в обычных строках).
Есть и другие специальные символы, которые имеют особое значение в регулярном выражении. Они используются для более сложных поисковых конструкций. Вот полный перечень этих символов: [ ] \ ^ $ . | ? * + ( ) .
Не надо пытаться запомнить этот список: мы разберёмся с каждым из них по отдельности, и таким образом вы выучите их «автоматически».
Экранирование символов
Допустим, мы хотим найти буквально точку. Не «любой символ», а именно точку.
Чтобы использовать специальный символ как обычный, добавьте к нему обратную косую черту: \. .
Это называется «экранирование символа».
Круглые скобки также являются специальными символами, поэтому, если нам нужно использовать именно их, нужно указать \( . В приведённом ниже примере ищется строка "g()" :
Если мы ищем обратную косую черту \ , это специальный символ как в обычных строках, так и в регулярных выражениях, поэтому мы должны удвоить её.
Косая черта
Символ косой черты ‘/’ , так называемый «слэш», не является специальным символом, но в JavaScript он используется для открытия и закрытия регулярного выражения: /. шаблон. / , поэтому мы должны экранировать его.
Вот как выглядит поиск самой косой черты ‘/’ :
С другой стороны, если мы не используем короткую запись /. / , а создаём регулярное выражение, используя new RegExp , тогда нам не нужно экранировать косую черту:
new RegExp
Если мы создаём регулярное выражение с помощью new RegExp , то нам не нужно учитывать / , но нужно другое экранирование.
Например, такой поиск не работает:
Аналогичный поиск в примере выше с /\d\.\d/ вполне работал, почему же не работает new RegExp("\d\.\d") ?
Причина в том, что символы обратной косой черты «съедаются» строкой. Как вы помните, обычные строки имеют свои специальные символы, такие как \n , и для экранирования используется обратная косая черта.
Вот как воспринимается строка «\d.\d»:
Строковые кавычки «съедают» символы обратной косой черты для себя, например:
- \n – становится символом перевода строки,
- \u1234 – становится символом Юникода с указанным номером,
- …А когда нет особого значения: как например для \d или \z , обратная косая черта просто удаляется.
Таким образом, new RegExp получает строку без обратной косой черты. Вот почему поиск не работает!
Чтобы исправить это, нам нужно удвоить обратную косую черту, потому что строковые кавычки превращают \\ в \ :