Pytanie w sprawie url, javascript, special-characters – ucieka znak specjalny w adresie URL

5

Używam adresu URL, aby otworzyć stronę html i wysyłam dane w querystringu z adresem URL strony.

Na przykład:abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue

Problem polega na tym, że jeślifirstvalue lubsecondvalue w parametrze zawiera znak specjalny jak#,(,),%,{, mój adres URL nie jest dobrze skonstruowany. W tym przypadku adres URL nie sprawdza poprawności. Robię to wszystkojavascript. Czy każde ciało może mi to pomóc.

Twoja odpowiedź

2   odpowiedź
3

Aby być bezpiecznym i upewnić się, że uniknąłeś wszystkich zarezerwowanych znaków określonych zarówno w RFC 1738, jak i RFC 3986, powinieneś użyć kombinacji encodeURIComponent, escape i zastąpić gwiazdkę ('*') w ten sposób:

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

[Wyjaśnienie] Podczas gdy RFC 1738: Uniform Resource Locators (URL) określa, że ​​znaki *,!, ', (I) mogą pozostać niekodowane w adresie URL,

Zatem tylko znaki alfanumeryczne, znaki specjalne „$ -_. +! *” () I znaki zastrzeżone używane do ich zarezerwowanych celów mogą być używane bez zakodowania w adresie URL.

RFC 3986, strony 12-13, stwierdza, że ​​te znaki specjalne są zarezerwowane jako separatory podrzędne.

reserved = gen-delims / sub-delims

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

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

Funkcja escape () jest przestarzała, ale może być użyta do kodowania URL wykrzyknika, pojedynczego cudzysłowu, lewego nawiasu i prawego nawiasu. A ponieważ istnieje pewna niejasność co do tego, czy gwiazdka musi być zakodowana w adresie URL, a kodowanie nie zaszkodzi, można jawnie kodować używając czegoś takiego jak wywołanie funkcji replace (). [Zauważ, że funkcja escape () jest przekazywana jakodrugi parametr do pierwszego wywołania funkcji replace (). Jak tutaj użyto, zastąp wywołania funkcją escape () raz dla każdego dopasowanego specjalnego znaku!, ', (Lub), a escape jedynie zwraca „sekwencję ucieczki” dla tego znaku z powrotem do zastąpienia, który ponownie składa wszystkie uciekające znaki z innym paprochy.]

Zobacz także„https://stackoverflow.com/questions/6533561/urlencode-the-asterisk-star-character”

Ponadto, podczas gdy niektóre strony internetowe nawet zidentyfikowały asterkisk (*) jako znak zastrzeżony w RFC3986, nie zawierają go wich narzędzie do kodowania składników URL.

Unkodowane adresy URL URL:

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

Kodowane adresy URL 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

Masz 3 opcje:

escape() will not encode: @*/+

encodeURI() will not encode: [email protected]#
escape() will not encode: @*/+

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

encodeURIComponent() will not encode: ~!*()'
amp;*()=:/,;?+' encodeURIComponent() will not encode: ~!*()'

Ale w twoim przypadku, jeśli chcesz przekazać URL do parametru GET innej strony, powinieneś użyć escape lub encodeURIComponent, ale nie encodeURI.

thanx yogesh, możesz mi powiedzieć, jak używać tych metod w javascript. czy mogę wywołać te metody, takie jak URL.escape (); ARV
escape jest przestarzałe. Nie używaj tego. Quentin
podkreślenie nie działa Animay
thanx yogesh, działało. ARV

Powiązane pytania