2012-05-27 4 views
4

Я использую url для того чтобы раскрыть страницу html, и я посылаю данные в querystring с url страницы. ex: abc.html? FirstParameter = firstvalue & seconedParameter = seconedvalue Проблема в том, что если значение «firstvalue» или «secondvalue» в параметре содержит специальный символ типа #, (,),%, {, то мой url не строит хорошо , В этом случае URL не проверяется. Я делаю все это в javascript. может любой орган, пожалуйста, помогите мне это.escaping специальный символ в url

ответ

10

вас есть 3 варианта:

escape() will not encode: @*/+ 

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

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

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

+0

Thanx Йогеш, пожалуйста, вы можете сказать мне, как использовать эти способы в JavaScript. я могу вызвать эти методы, такие как URL.escape(); – ARV

+0

thanx yogesh, это сработало. – ARV

0

Для обеспечения безопасности и обеспечения того, чтобы вы избежали всех зарезервированных символов, указанных в RFC 1738 и RFC 3986, вы должны использовать комбинацию encodeURIComponent, escape и замену для звездочки ('*') следующим образом:

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

[Объяснение] Хотя RFC 1738: Uniform локаторы ресурсов (URL) указывает, что *, «, (и) символы могут быть оставлены неперекодированный в URL,

Таким образом, только! alphanumerics, специальные символы «$ -_. +! * '(),» и зарезервированные символы, используемые для их зарезервированных целей, могут использоваться , не назначенные в URL.

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

зарезервированных = генераторный delims/суб-delims

генераторного delims = ":" "?"/"/"// "#"/"["/"]"/"@"

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

Функция escape() устарела, но может использоваться для URL-кодирования восклицательного знака, одинарной кавычки, левого скобки и правой скобки. И так как существует некоторая двусмысленность в отношении того, должна ли звездочка быть закодирована в URL-адресе, и это не мешает кодировать, ее можно явно кодировать, используя что-то вроде вызова функции replace(). [Обратите внимание, что функция escape() передается как second parameter to the first replace() function call. Как используется здесь, замените вызовы функцией escape() один раз для каждого соответствующего специального символа!, ', (Или), и escape просто возвращает «escape-последовательность» для этого символа для замены, который повторно собирает любые экранированные символы с другим фрагменты.]

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

Также в то время как некоторые сайты даже определили asterkisk (*) как зарезервированный символ в RFC3986, они не включают его в their URL component encoding tool.

Unencoded URL Parms:

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

закодированные URL Parms:

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 
Смежные вопросы