Zaporedje escapiranja
Skoraj vsaka napaka pri escapiranju je napaka konteksta in ne napaka sintakse. Znak je znan — navedek, povratnica, ampersand — in nejasno je le, katera od šestih nasprotujočih si pravil se uporablja, kjer se bo niz znašel.
Zato je ta tabela urejena po kontekstu in ne po znaku. Isti navedek je v celici CSV podvojen, v JSON escapiran s povratnico, spremenjen v " v HTML in popolnoma sam v enojnih navedkih v lupini. Štiri vrstice, štiri pravila, en znak.
Pravilo, ki je najpomembnejše, je tisto, ki se ga ljudje sežejo nazadnje: escapiraj na meji, ki jo preseka vrednost, in jo escapiraj enkrat. Besedilo, ki je dvakrat escapirano — & v viru strani, \\n v izhodni datoteki — je podpis vrednosti, ki je prešla skozi dva kodirunika, ki sta vsak predpostavljala, da sta prva.
JSON nizi
10JSON dovoljuje natanko te escapiranja. Dobesedni skok ali tabelator znotraj niza je neveljaven.
| Escapiranje | Pomeni | Kdaj to potrebuješ | V kontekstu |
|---|---|---|---|
| \" | " | Dvojni navedek znotraj niza | "say \"hi\"" |
| \\ | \ | Dobesedna povratnicaRazlog, da se poti Windows lomijo JSON. | "C:\\dir" |
| \/ | / | Poševnica — izbirnaZakonito, vendar nepotrebno; navada iz vgrajevanja JSON-a v <script> oznake. | "a\/b" |
| \n | U+000A | Podaja za krmiljenje | "line\nline" |
| \r | U+000D | Vračalka vozička | |
| \t | U+0009 | Tabulatorja | |
| \b | U+0008 | Vračalo | |
| \f | U+000C | Obrazec oddajanja | |
| \u00e9 | é | Kateri koli znak po njegovi štiricifrski kodni točki | "caf\u00e9" |
| \ud83d\ude00 | 😀 | Znak nad U+FFFF, kot par nadomestkaJSON nima oblike \u{…}, zato astralski znaki potrebujejo dve escapiranja. |
JavaScript nizi
10Nadmnožica JSON-a, plus zaporedje escapiranja template-literal.
| Escapiranje | Pomeni | Kdaj to potrebuješ | V kontekstu |
|---|---|---|---|
| \' | ' | Enojni navedek znotraj enojno navedka niza | |
| \" | " | Dvojni navedek znotraj dvojno navedka niza | |
| \` | ` | Povratnica znotraj template literala | |
| \${ | ${ | Dobesedni ${ znotraj template literalaBrez povratnice se začne interpolacija. | |
| \n | U+000A | Podaja za krmiljenje | |
| \xe9 | é | Znak po dveh šestnajstičnih števkah, do U+00FF | |
| \u00e9 | é | Znak po štirih šestnajstičnih števkah | |
| \u{1f600} | 😀 | Kateri koli kod, ne glede kako dolgNi potrebna par nadomestka, za razliko od štiricifrne oblike. | |
| \0 | U+0000 | Ničeln znak | |
| \u2028 | U+2028 | Ločilnik vrsticVeljaven v nizu JS, vendar ne v JSON-u — klasičen prelom JSONP. |
HTML besedilo in atributi
8Le & in < strogo morata biti escapirana v besedilu; navedki so pomembni znotraj atributov.
| Escapiranje | Pomeni | Kdaj to potrebuješ | V kontekstu |
|---|---|---|---|
| & | & | AmpersandEscapiraj tega prvega, ali vsak drugi escape podvoji. | |
| < | < | Manj kot znak, tako da ne začne oznake | |
| > | > | Večji kot znak | |
| " | " | Dvojni navedek znotraj atributa | |
| ' | ' | Enojni navedek znotraj atributa' tudi deluje v HTML5, vendar je numerična oblika varna povsod. | |
| | U+00A0 | Razmik brez prekinjanja | |
| é | é | Kateri koli znak po desetiški kodni točki | |
| é | é | Kateri koli znak po šestnajstični kodni točki |
URL-ji (procentualno kodiranje)
9Kateri znaki potrebujejo escapiranje, je odvisno od dela URL-ja, v katerem sedijo.
| Escapiranje | Pomeni | Kdaj to potrebuješ | V kontekstu |
|---|---|---|---|
| %20 | Presledek, veljaven kjerkoli v URL-ju | ||
| + | Presledek, vendar samo v nizu poizvedbe kodiranem s formularjiV segmentu poti je to dobesedni plus znak. | ||
| %25 | % | Dobesedni znak odstotkaIzpusti to in vrednost dekodira dvakrat. | |
| %2F | / | Poševnica znotraj enega segmenta poti | |
| %3F | ? | Vprašalni znak znotraj vrednosti | |
| %26 | & | Ampersand znotraj vrednosti parametra | |
| %3D | = | Znak enačaja znotraj vrednosti parametra | |
| %23 | # | Heš, tako da ne začne fragmenta | |
| %C3%A9 | é | Ne-ASCII znak kot njegovi UTF-8 bajtiEnojni znak se lahko spremeni v dve, tri ali štiri skupini procentov. |
Polja CSV
5RFC 4180: zapiši polje, nato podvoji kateri koli navedek znotraj. Povratnice ne pomenijo nič.
| Escapiranje | Pomeni | Kdaj to potrebuješ | V kontekstu |
|---|---|---|---|
| "" | " | Navedek znotraj navedka — ga podvoji | "say ""hi""" |
| "a,b" | , | Polje, ki vsebuje ločilnik — zapiši polje | |
| "a b" | U+000A | Polje, ki vsebuje prelom vrstice — zapiši polje | |
| " a" | Ohrani začetne ali zadnje presledkeNekvotiran, mnogi parserji jih odkrijejo. | ||
| '=SUM(A1) | = | Zaustavite preglednico, da ne izvaja celice kot formuleVelja za vrednosti, ki se začnejo z =, +, - ali @. To je injiciranje formule. |
SQL dobesedni in identifikatorji
6Preberi te; jih ne pisi. Uporabi parameterske poizvedbe namesto tega.
| Escapiranje | Pomeni | Kdaj to potrebuješ | V kontekstu |
|---|---|---|---|
| '' | ' | Navedek znotraj dobesednega niza — ga podvoji | 'O''Brien' |
| "order" | order | Rezervirana beseda, ki se uporablja kot ime stolpcaDvojni navedki so standard; SQL Server uporablja [oklepaje]. | |
| `order` | order | Enako kot v MySQL in MariaDB | |
| \% | % | Dobesedni % znotraj vzorca LIKE | |
| \_ | _ | Dobesedni _ znotraj vzorca LIKE | |
| $tag$ … $tag$ | ' | Citiranje dolarja PostgreSQL — sploh ni escapiranja znotrajKoristno za telesa kode, kjer podvojitev vsakega navedka ni berljivo. |
Argumenti lupine
6Enojni navedki so dobesedni, dvojni navedki še vedno razširjajo spremenljivke.
| Escapiranje | Pomeni | Kdaj to potrebuješ | V kontekstu |
|---|---|---|---|
| '…' | $ ` \ | Vse znotraj je dobesednoNajvarnejše citiranje tam — vendar ne more vsebovati enojnega navedka. | |
| "…" | * ? space | Globus in presledki so varni, spremenljivke še vedno razširjajoAlways quote variables: "$var", never bare $var. | |
| \ | Presledek v nenavedku imenu datoteke | ||
| \$ | $ | Dobesedni znak dolarja znotraj dvojnih navedkov | |
| \` | ` | Dobesedna povratnica, ne zamenjava ukaza | |
| '\'' | ' | Enojni navedek znotraj enojno navedka nizaZapri, escapiraj, ponovno odpri — ni načina, da bi ga direktno ugniezdil. |