Вопрос по javascript – экранирование специального символа в URL

5

Я использую URL, чтобы открыть HTML-страницу, и я отправляю данные в строке запроса с URL-адрес страницы.

Например:abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue

Проблема в том, что еслиfirstvalue или жеsecondvalue в параметре содержится специальный персонаж, как#,(,),%,{, то мой URL не строит хорошо. В этом случае URL не проверяется. Я делаю все это вjavascript. Can any body please help me out this.

Ваш Ответ

2   ответа
3

что вы экранировали все зарезервированные символы, указанные как в RFC 1738, так и в RFC 3986, вы должны использовать комбинацию encodeURIComponent, escape и замену звездочки (& amp;

encoded = encodeURIComponent( parm ).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");

[Пояснение] В то время как RFC 1738: Унифицированные указатели ресурсов (URL) указывает, что символы *,!, ', (И) могут оставаться незашифрованными в URL,

Thus, only alphanumerics, the special characters "$-_.+!*'(),", and reserved characters used for their reserved purposes may be used unencoded within a URL.

RFC 3986, стр. 12-13, утверждает, что эти специальные символы зарезервированы в качестве разделителей.

reserved = gen-delims / sub-delims

gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="

Функция escape () устарела, но ее можно использовать для URL-кодирования восклицательного знака, одинарных кавычек, левой скобки и правой скобки. А поскольку существует некоторая неоднозначность относительно того, должна ли звездочка кодироваться в URL, и кодирование не повредит, ее можно явно кодировать, используя что-то вроде вызова функции replace (). [Обратите внимание, что функция escape () передается каквторой параметр первого вызова функции replace (), Как используется здесь, replace вызывает функцию escape () один раз для каждого соответствующего специального символа!, ', (Или), и escape просто возвращает' escape-последовательность ' для замены этого символа обратно, который собирает любые экранированные символы с другими фрагментами.]

Также см& APOS; https: //stackoverflow.com/questions/6533561/urlencode-the-asterisk-star-character'

Кроме того, хотя некоторые веб-сайты даже указали звездочку (*) как зарезервированный символ в соответствии с RFC3986, они не включают его вих инструмент кодирования компонента URL.

Незакодированные URL-адреса:

parm1=this is a test of encoding [email protected]#$%^&*()'
parm2=note that * is not encoded

Закодированные URL-адреса:

parm1=this+is+a+test+of+encoding+%21%40%23%24%25%5E%26*%28%29%27
parm2=note+that+*+is+not+encodeds+not+encoded
15

escape() will not encode: @*/+

encodeURI() will not encode: [email protected]#$&*()=:/,;?+'

encodeURIComponent() will not encode: ~!*()'

Но в вашем случае, если вы хотите передать URL в параметр GET другой страницы, вы должны использовать escape или encodeURIComponent, но не encodeURI.

escapeError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded ARV
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded ARV

Похожие вопросы