экранирование специального символа в URL-адресе
Я использую URL-адрес для открытия HTML-страницы, и я отправляю данные в строке запроса с URL-адресом страницы.
2 ответа
У вас есть 3 варианта:
Но в вашем случае, если вы хотите передать URL-адрес в параметр GET другой страницы, вы должны использовать escape или encodeURIComponent, но не encodeURI.
Чтобы быть в безопасности и убедиться, что вы экранировали все зарезервированные символы, указанные в RFC 1738 и RFC 3986, вы должны использовать комбинацию encodeURIComponent, escape и замену звездочки (‘*’) следующим образом:
[Пояснение] Хотя RFC 1738: Uniform Resource Locators (URL) указывает, что символы *. ‘, (И) могут оставаться в URL-адресе незакодированными,
Таким образом, только буквенно-цифровые символы, специальные символы «$ -_. +! * ‘(),» И зарезервированные символы, используемые для их зарезервированных целей, могут использоваться в незашифрованном виде в URL-адресе.
RFC 3986, страницы 12-13, утверждает, что эти специальные символы зарезервированы в качестве разделителей.
зарезервировано = общие / частичные разделители
gen-delims = «:» / «/» / «?» / «#» / «[» / «]» / «@»
sub-delims = «!» / «$» / «&» / «‘» / «(» / «)» / «*» / «+» / «,» / «;» знак равно
Функция escape () устарела, но может использоваться для кодирования URL-адреса восклицательного знака, одинарной кавычки, левой и правой скобок. И поскольку существует некоторая двусмысленность в том, нужно ли кодировать звездочку в URL-адресе, и это не повредит кодированию, вы можете явно кодировать, используя что-то вроде вызова функции replace (). [Обратите внимание, что функция escape () передается как второй параметр при первом вызове функции replace (). Как здесь используется, replace вызывает функцию escape () один раз для каждого совпадающего специального символа!, ‘, (Или), а escape просто возвращает « escape-последовательность’ ‘для этого символа обратно для замены, которая повторно собирает любые экранированные символы с другим фрагменты.]
Кроме того, хотя некоторые веб-сайты даже определили звездочку (*) как зарезервированный символ согласно RFC3986, они не включают ее в их инструмент кодирования компонента URL.
экранирование специального символа в 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 из Java
Есть строка, содержащая знак вопроса ? , или несколько. Строка передается как параметр в URL. Знак вопроса нужно заменить на %3f . Как это сделать?
Такой код дает ошибку:
Перевод вопроса с enSO: «Replace a question mark (?) with (\?)», не дословный, но очень похоже.
Разобрался сам. Поскольку знак вопроса «?» является спецсимволом в regexp, то экранировать его нужно не одним «\» слешем, а двумя «\\»
Ну а в общем случае для разных спецсимволов у меня получилось вот что:
Если кто сюда попал в поисках аналогичного вопроса для JavaSvript, то ответ:
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Экранирование адресов URL

Сценарии на стороне сервера
В адресах URL используются иные специальные символы и иные соглашения по их экранированию. По этой причине для экранирования адресов URL применяются другие библиотечные инструменты Python. Модуль Python urllib.parse предоставляет два инструмента, осуществляющие преобразование: функцию quote, возвращающую стандартные шестнадцатеричные экранированные последовательности %XX URL для большинства не алфавитно-цифровых символов, и функцию quote_plus, для преобразования пробелов в символы +. Кроме того, модуль urllib. parse предоставляет функции для обратного преобразования экранированных последовательностей в адресах URL: функция unquote преобразует последовательности %XX, а функция unquote_plus также преобразует символы + в пробелы. Ниже приводится пример использования модуля в интерактивной оболочке:
>>> import urllib . parse
Обратите внимание, что модуль Python cgi в процессе извлечения входных данных также преобразует экранированные последовательности URL обратно в их исходные символы и меняет знаки + на пробелы. Внутренне конструктор cgi.FieldStorage при необходимости автоматически вызывает инструменты urllib.parse для обратного преобразования параметров, передаваемых в конце адреса URL. В итоге сценарии CGI получают исходные, неэкранированные строки URL, и им не требуется самостоятельно производить обратное преобразование значений. Как мы видели, сценариям CGI вообще не требуется знать, что входные данные поступили из URL.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011