Kaçış dizileri
Neredeyse her kaçış hatası, söz dizimi hatası değil bağlam hatasıdır. Karakter bilinir — bir tırnak, bir ters eğik çizgi, bir ampersand — ve belirsiz olan şey, dizenin nereye inmek üzere olduğu yerde hangi altı kuraldan hangisinin uygulanacağıdır.
Yani bu tablo karaktere göre değil bağlama göre organize edilmiştir. Aynı tırnak bir CSV hücresinde iki katına çıkarılır, JSON'da ters eğik çizgiyle kaçırılır, HTML'de " olur ve bir kabuğun tek tırnak içinde tamamen yalnız bırakılır. Dört satır, dört kural, bir karakter.
En önemli kural, insanların en son ulaştığı kuraldır: değerin geçtiği sınırda kaçışlayın ve onu bir kez kaçışlayın. İki kez kaçırılan metin — sayfa kaynağında bir &, çıkış dosyasında bir \\n — değerin iki kodlayıcıdan geçtiğinin imzası olup, her biri ilk olduğunu varsaydı.
JSON dizeleri
10JSON tam olarak bu kaçışları sağlar. Bir dize içinde gerçek bir satır sonu veya sekme geçersizdir.
| Kaçış | Anlam | Ne zaman ihtiyacınız var | Bağlamda |
|---|---|---|---|
| \" | " | Bir dize içinde çift tırnak | "say \"hi\"" |
| \\ | \ | Gerçek bir ters eğik çizgiWindows yollarının JSON'da neden kırılması nedenidir. | "C:\\dir" |
| \/ | / | Eğik çizgi — isteğe bağlıYasal ama gereksiz; <script> etiketlerine JSON gömmekten bir alışkanlık. | "a\/b" |
| \n | U+000A | Bir beslenme hattı | "line\nline" |
| \r | U+000D | Bir taşıt dönüşü | |
| \t | U+0009 | Bir sekme | |
| \b | U+0008 | Geri boşluk | |
| \f | U+000C | Bir form beslemesi | |
| \u00e9 | é | Herhangi bir karakter kod noktasına göre | "caf\u00e9" |
| \ud83d\ude00 | 😀 | U+FFFF'nin üstündeki karakter, vekil çifti olarakJSON hiçbir \u{…} formuna sahip değil, bu nedenle astral karakterler iki kaçış alır. |
JavaScript dizeleri
10JSON'un bir üst kümesi, artı şablon-literal kaçışları.
| Kaçış | Anlam | Ne zaman ihtiyacınız var | Bağlamda |
|---|---|---|---|
| \' | ' | Tek tırnaklanmış bir dize içinde tek tırnak | |
| \" | " | Çift tırnaklı bir dize içinde çift tırnak | |
| \` | ` | Şablon değişmezinde arka tırnak | |
| \${ | ${ | Şablon değişmezi içinde gerçek ${Ters eğik çizgi olmadan bir interpolasyon başlar. | |
| \n | U+000A | Bir beslenme hattı | |
| \xe9 | é | Iki hex rakamı ile bir karakter, U+00FF'ye kadar | |
| \u00e9 | é | Dört hex rakamı ile bir karakter | |
| \u{1f600} | 😀 | Herhangi bir kod noktası, ne kadar uzun olursa olsunDört haneli formdan farklı olarak vekil çiftine ihtiyaç duymaz. | |
| \0 | U+0000 | Null karakter | |
| \u2028 | U+2028 | Satır ayırıcısıJS dizesinde geçerli ancak JSON'da değil — klasik bir JSONP kırılması. |
HTML metin ve öznitelikleri
8Metinde sadece & ve < kesinlikle kaçış yapılmalıdır; tırnaklar özniteliklerde önemli olup.
| Kaçış | Anlam | Ne zaman ihtiyacınız var | Bağlamda |
|---|---|---|---|
| & | & | Bir ampersandBunu ilk kaçışlayın, aksi takdirde diğer her kaçış iki katına çıkar. | |
| < | < | Bir küçüktür işareti, böylece etiket başlamaz | |
| > | > | Daha büyük bir işaret | |
| " | " | Öznitelik içinde çift tırnak | |
| ' | ' | Öznitelik içinde tek tırnak' HTML5'te de çalışır, ancak sayısal form her yerde güvenlidir. | |
| | U+00A0 | Bölünmez boşluk | |
| é | é | Herhangi bir karakter ondalık kod noktasına göre | |
| é | é | Herhangi bir karakter hex kod noktasına göre |
URL'ler (yüzde kodlama)
9Hangi karakterlerin kaçış yapılması gerektiği URL'nin içindeki kısma bağlıdır.
| Kaçış | Anlam | Ne zaman ihtiyacınız var | Bağlamda |
|---|---|---|---|
| %20 | Bir URL'de geçerli boşluk | ||
| + | Boşluk, ancak sadece form-kodlanmış bir sorgu dizesi içindeBir yol segmentinde bu gerçek bir artı işaretidir. | ||
| %25 | % | Gerçek bir yüzde işaretiBunu kaçırmayın ve değer iki kez kodu çöz. | |
| %2F | / | Tek bir yol segmenti içinde eğik çizgi | |
| %3F | ? | Bir değerde soru işareti | |
| %26 | & | Bir parametre değerinde ampersand | |
| %3D | = | Bir parametre değerinde eşit işareti | |
| %23 | # | Bir karmaca, böylece parça başlamaz | |
| %C3%A9 | é | Bir ASCII olmayan karakter, UTF-8 baytları olarakBir karakter iki, üç veya dört yüzde grubuna olabilir. |
CSV alanları
5RFC 4180: alanı tırnak işaretleriyle sarın, sonra içindeki herhangi bir tırnak işaretini iki katına çıkarın. Ters eğik çizgiler hiçbir şey ifade etmez.
| Kaçış | Anlam | Ne zaman ihtiyacınız var | Bağlamda |
|---|---|---|---|
| "" | " | Tırnak işaretli bir alan içinde tırnak işareti — iki katına çıkarın | "say ""hi""" |
| "a,b" | , | Sınır içeren bir alan — alanı tırnak işaretleriyle sarın | |
| "a b" | U+000A | Satır sonu içeren bir alan — alanı tırnak işaretleriyle sarın | |
| " a" | Öncü veya sondaki boşlukları koruyunİşaretlenmemişte, birçok ayrıştırıcı onları kırpar. | ||
| '=SUM(A1) | = | E-tablonun hücreyi formül olarak yürütmesini durdurun= + - veya @ ile başlayan değerlere uygulanır. Bu formül enjeksiyonudur. |
SQL değişmezleri ve tanımlayıcıları
6Bunları okuyun; yazmayla. Bunun yerine parametreli sorgular kullanın.
| Kaçış | Anlam | Ne zaman ihtiyacınız var | Bağlamda |
|---|---|---|---|
| '' | ' | Bir dize değişmezinde tırnak işareti — iki katına çıkarın | 'O''Brien' |
| "order" | order | Sütun adı olarak ayrılmış bir sözcükÇift tırnaklar standarttır; SQL Server [parantez] kullanır. | |
| `order` | order | MySQL ve MariaDB'de aynı | |
| \% | % | LIKE deseni içinde gerçek bir % işareti | |
| \_ | _ | LIKE deseni içinde gerçek bir _ işareti | |
| $tag$ … $tag$ | ' | PostgreSQL dolar tırnaklama — içinde hiç kaçış yapılmazBir kodun gövdesi için yararlı, nerede her tırnak işaretini iki katına çıkarmak okunamaz. |
Kabuk argümanları
6Tek tırnak kesildir, çift tırnak hala değişkenleri genişletir.
| Kaçış | Anlam | Ne zaman ihtiyacınız var | Bağlamda |
|---|---|---|---|
| '…' | $ ` \ | İçeri her şey kerildirEn güvenli tırnaklama — ancak tek bir tırnak içeremez. | |
| "…" | * ? space | Globüller ve boşluklar güvenli, değişkenler hala genişlerAlways quote variables: "$var", never bare $var. | |
| \ | Bir boşlukta işaretlenmemiş bir dosya adında | ||
| \$ | $ | Çift tırnaklar içinde gerçek bir dolar işareti | |
| \` | ` | Gerçek bir arka tırnak, komut ikamesi değil | |
| '\'' | ' | Tek tırnaklar içinde tek tırnakKapat, kaçış, yeniden aç — doğrudan iç içe geçmesi için bir yol yoktur. |