URL'den kaçan ve işareti


203

Ve işaretleri ile dizeleri içeren bir GET mesajı göndermeye çalışıyorum ve URL ve ve işareti kaçmak nasıl anlayamıyorum.

Misal:

http://www.example.com?candy_name=M&M
result => candy_name = M

Ayrıca denedim:

http://www.example.com?candy_name=M\&M
result => candy_name = M\\

URL'leri manuel olarak kullanıyorum, bu yüzden sadece doğru karakterlere ihtiyacım var.

Hiçbir kütüphane kullanamıyorum. Nasıl yapılabilir?

Yanıtlar:


350

Yüzde kodlanmış olmaları gerekir:

> encodeURIComponent('&')
"%26"

Durumunuzda, URL şöyle görünecektir:

http://www.mysite.com?candy_name=M%26M

2
: -% 26 benim için çalışmıyor. Başka bir çözüm var mı.?
Sanjiv

2
&% 26 yerine, hala aynı hatayı gösteriyorA potentially dangerous Request.Path value was detected from the client (&).
Sanjiv

4
@Sanjiv: Bu kodunuzla ilgili bir sorun, yüzde kodlaması değil. Bir soru sor.
Blender

2
@Sanjiv önce "&" yerine "% 26" yazdığınızdan emin olun. Bkz. Kod ::: NSString * message = @ "Merhaba Jack & Jill"; message = [message stringByReplacingOccurrencesOfString: @ "&" withString: @ "% 26"]; message = [message stringByAppendingString: @ ""]; message = [message stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
Nirav

40

Bu sadece URL'lerdeki ve işareti için değil, ayrılmış tüm karakterler için de geçerlidir . Bunlardan bazıları:

 # $ & + ,  / : ; = ? @ [ ]

Fikir, &bir HTML belgesindeki bir kodlama ile aynıdır , ancak HTML belgesinin içinde olmasının yanı sıra içerik URI içinde olacak şekilde değişmiştir. Dolayısıyla, yüzde kodlaması, her iki bağlamın içinde ayrıştırmayla ilgili sorunları önler.

Bunun çok işe yaradığı yer, başka bir URL'nin içine bir URL koymanız gerektiğidir. Örneğin, Twitter'da bir durum göndermek istiyorsanız:

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com)

Tweet'imde çok sayıda ayrılmış karakter var ?'():/, bu yüzden statusURL parametresinin tüm değerini kodladım. mailto:İleti gövdesi veya öznesi olan bağlantılar kullanılırken de yararlıdır , çünkü satır sonlarını, ve işaretleri vb. Sağlam tutmak için bodyve subjectparametrelerini kodlamanız gerekir .

Ayrılmış kümedeki bir karakterin ("ayrılmış karakter") belirli bir bağlamda özel bir anlamı ("ayrılmış amaç") olduğunda ve bir URI şeması bu karakteri başka bir amaçla kullanmanın gerekli olduğunu söylüyorsa, karakter yüzde kodlu olmalıdır. Ayrılmış bir karakterin yüzde kodlaması, karakterin ASCII'deki karşılık gelen bayt değerine dönüştürülmesini ve ardından bu değeri bir onaltılık basamak çifti olarak temsil etmeyi içerir. Ardından, kaçış karakteri olarak kullanılan yüzde işareti ("%") olan rakamlar, ayrılmış karakter yerine URI'de kullanılır. (ASCII olmayan bir karakter için, genellikle UTF-8'deki bayt dizisine dönüştürülür ve sonra her bayt değeri yukarıdaki gibi temsil edilir.) Ayrılmış karakter, örneğin, "yol" da kullanılıyorsa bir URI bileşeni, yol bölümleri arasında bir sınırlayıcı olmanın özel bir anlamına sahiptir. Belirli bir URI şemasına göre "/" bir yol segmentinde olması gerekiyorsa, segmentte ham "/" yerine üç karakter "% 2F" veya "% 2f" kullanılmalıdır.

http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters


4
Yukarıdaki listede ! ' ( ) *URL kullanılarak kodlanmamıştır encodeURIComponent.
Amil Waduwawara

bu sorunu çözen bir php işlevi urlencode var: use $ escapedfilename = urlencode ($ filename);
Jeremy Young


4

URL'lerde izin verilmeyen karakterlerden 'kaçmak' için% karakterini kullanabilirsiniz. Bkz. [RFC 1738].

Http://www.asciitable.com/ adresindeki ASCII değerleri tablosu .

&Onaltılık 26 olarak görebilirsiniz - bu nedenle M% 26M'ye ihtiyacınız vardır.


2

Birisi PHP'de isterse bu yardımcı olabilir

$variable ="candy_name=M&M";
$variable = str_replace("&", "%26", $variable);


1

Blender çözümü hakkında küçük bir yorum eklemek istiyorum.

Aşağıdakileri yapabilirsiniz:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M');

Bu çıktı:

http://example.com?candy_name=M%26M

Bu konuda harika bir şey sadece & herhangi bir özel karakter için değil.

Örneğin:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M?><')

Çıktılar:

"http://example.com?candy_name=M%26M%3F%3E%3C"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.