Bir web sunucusuna gönderilecek bir sorgu dizesini kodlarken - ne zaman escape()
ne zaman encodeURI()
veya encodeURIComponent()
kullanırsınız:
Kaçışı kullan:
escape("% +&=");
VEYA
use encodeURI() / encodeURIComponent()
encodeURI("http://www.google.com?var1=value1&var2=value2");
encodeURIComponent("var1=value1&var2=value2");
Kullanmayın! escape()`, B.2.1.2 escape bölümünde tanımlanmıştır ve Ek B'nin giriş metni şöyle der:
... Bu ekte belirtilen tüm dil özellikleri ve davranışları bir veya daha fazla istenmeyen özelliğe sahiptir ve eski kullanımın olmaması durumunda bu spesifikasyondan çıkarılacaktır. ... ... Programcılar yeni ECMAScript kodu yazarken bu özellikleri ve davranışları kullanmamalı veya bunların varlığını varsaymamalıdır....
Davranışlar:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
Özel karakterler, aşağıdakiler hariç olmak üzere kodlanır: @*_+-./
Kod birimi değeri 0xFF veya daha az olan karakterler için onaltılık biçim, iki basamaklı bir kaçış dizisidir: %xx
.
Daha büyük kod birimine sahip karakterler için dört basamaklı %uxxxx
formatı kullanılır. Buna bir sorgu dizesi içinde izin verilmez (RFC3986'da tanımlandığı gibi):
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
Yüzde işaretine yalnızca doğrudan iki hexdigit tarafından takip ediliyorsa izin verilir, u
tarafından takip edilen yüzde işaretine izin verilmez.
Çalışan bir URL istediğinizde encodeURI kullanın. Bu çağrıyı yapın:
encodeURI("http://www.example.org/a file with spaces.html")
almak için:
http://www.example.org/a%20file%20with%20spaces.html
URL'yi yok edip geri döndüreceğinden encodeURIComponent'i çağırmayın
http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html
Bir URL parametresinin değerini kodlamak istediğinizde encodeURIComponent öğesini kullanın.
var p1 = encodeURIComponent("http://example.org/?a=12&b=55")
Ardından ihtiyacınız olan URL'yi oluşturabilirsiniz:
var url = "http://example.net/?param1=" + p1 + "¶m2=99";
Ve bu tam URL'yi alacaksınız:
http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55¶m2=99
encodeURIComponent'in '
karakterinden kaçmadığını unutmayın. Yaygın bir hata, bir enjeksiyon hatasına maruz kalabilecek href='MyUrl'
gibi html nitelikleri oluşturmak için kullanmaktır. Dizelerden html oluşturuyorsanız, öznitelik tırnak işaretleri için '
yerine "
kullanın veya ekstra bir kodlama katmanı ekleyin ('
%27 olarak kodlanabilir).
Bu tür kodlama hakkında daha fazla bilgi için şu adrese bakabilirsiniz: http://en.wikipedia.org/wiki/Percent-encoding
Ayrıca, hepsinin farklı karakter kümelerini kodladığını unutmayın ve ihtiyacınız olanı uygun şekilde seçin. encodeURI(), escape()'ten daha az (ve dannyp'in belirttiği gibi farklı) karakter kodlayan encodeURIComponent()'ten daha az karakter kodlar.