Secvențe de escapare
Aproape fiecare bug de escapare este o eroare de context mai degrabă decât o eroare de sintaxă. Caracterul este cunoscut — o ghilimă, o bară inversă, o ampersand — și ceea ce este neclar este care din șase reguli conflictuale se aplică acolo unde șirul este pe cale să aterizeze.
Deci acest tabel este organizat după context, nu după caracter. Aceeași ghilimă este dublată într-o celulă CSV, scapă cu bară inversă în JSON, transformată în " în HTML și lăsată complet singură în interiorul ghilimelor simple în shell. Patru rânduri, patru reguli, un caracter.
Regula care contează cel mai mult este cea pe care oamenii o caută ultimă: escapează la limita pe care valoarea o traversează și escapează-o o singură dată. Textul care este evitat de două ori — un & în sursa paginii, un \\n în fișierul de ieșire — este semnătura unei valori care a trecut prin doi codificatori care fiecare au presupus că erau primii.
Șiruri JSON
10JSON permite exact aceste escapări. O linie nouă literală sau tab în interiorul unui șir este nevalid.
| Escapare | Înseamnă | Când ai nevoie | În context |
|---|---|---|---|
| \" | " | O ghilimă dublă în interiorul unui șir | "say \"hi\"" |
| \\ | \ | O bară inversă literalăMotivul pentru care căile Windows rupe JSON. | "C:\\dir" |
| \/ | / | O bară directă — opționalăLegală dar inutilă; un obicei din încorporarea JSON în etichete <script>. | "a\/b" |
| \n | U+000A | O alimentare linie | "line\nline" |
| \r | U+000D | O întoarcere cărucior | |
| \t | U+0009 | O tabulație | |
| \b | U+0008 | O spate spațiu | |
| \f | U+000C | Un formular alimentare | |
| \u00e9 | é | Orice caracter după punctul ei de cod din patru cifre | "caf\u00e9" |
| \ud83d\ude00 | 😀 | Un caracter deasupra U+FFFF, ca o pereche substituteJSON nu are formă \u{…}, deci caractere astrale durează două escapări. |
Șiruri JavaScript
10Un superset al JSON, plus escapările literalelor șablonului.
| Escapare | Înseamnă | Când ai nevoie | În context |
|---|---|---|---|
| \' | ' | O ghilimă simplă în interiorul unui șir din ghilimele simple | |
| \" | " | O ghilimă dublă în interiorul unui șir din ghilimele duble | |
| \` | ` | O ghilimă inversă în interiorul unui literal șablon | |
| \${ | ${ | Un literal ${ în interiorul unui literal șablonFără bară inversă începe o interpolare. | |
| \n | U+000A | O alimentare linie | |
| \xe9 | é | Un caracter după două cifre hex, până la U+00FF | |
| \u00e9 | é | Un caracter după patru cifre hex | |
| \u{1f600} | 😀 | Orice punct de cod, indiferent de lungimeNu are nevoie de pereche substitute, spre deosebire de forma cu patru cifre. | |
| \0 | U+0000 | Un caracter nul | |
| \u2028 | U+2028 | Separator linieValabil într-un șir JS dar nu în JSON — o rupere JSONP clasică. |
Text și atribute HTML
8Doar & și < trebuie strict evitați în text; ghilimele contează în interiorul atributelor.
| Escapare | Înseamnă | Când ai nevoie | În context |
|---|---|---|---|
| & | & | Un ampersandEscapează-o pe asta în primul rând, sau fiecare altă escapare se dublează. | |
| < | < | Un semn mai mic, deci nu începe o etichetă | |
| > | > | Un semn mai mare decât | |
| " | " | O ghilimă dublă în interiorul unui atribut | |
| ' | ' | O ghilimă simplă în interiorul unui atribut' de asemenea funcționează în HTML5, dar forma numerică este sigură peste tot. | |
| | U+00A0 | Un spațiu care nu se rupe | |
| é | é | Orice caracter după punct de cod zecimal | |
| é | é | Orice caracter după punct de cod hex |
URL-uri (codificare procent)
9Care caractere trebuie evitate depinde de partea URL-ului în care se află.
| Escapare | Înseamnă | Când ai nevoie | În context |
|---|---|---|---|
| %20 | Un spațiu, valabil oriunde în un URL | ||
| + | Un spațiu, dar doar în șirul de interogare codat din formăÎntr-un segment de cale aceasta este un semn plus literal. | ||
| %25 | % | Un semn procent literalPierdere asta și valoarea se decodifică de două ori. | |
| %2F | / | O bară în interiorul unui segment cale unic | |
| %3F | ? | Un semn întrebare în interiorul unei valori | |
| %26 | & | Un ampersand în interiorul unei valori parametru | |
| %3D | = | Un semn egal în interiorul unei valori parametru | |
| %23 | # | Un hash, deci nu începe fragmentul | |
| %C3%A9 | é | Un caracter non-ASCII, ca octeții lui UTF-8Un caracter poate deveni două, trei sau patru grupuri procent. |
Câmpuri CSV
5RFC 4180: cotează câmpul, apoi dublează orice citat în interiorul lui. Barele inversate nu înseamnă nimic.
| Escapare | Înseamnă | Când ai nevoie | În context |
|---|---|---|---|
| "" | " | O ghilimă în interiorul unui câmp citat — dublează-o | "say ""hi""" |
| "a,b" | , | Un câmp care conține delimitatorul — cotează câmpul | |
| "a b" | U+000A | Un câmp care conține o întrerupere linie — cotează câmpul | |
| " a" | Păstrează spații conducente sau finalizanteNecitatat, mulți analizatori le taie. | ||
| '=SUM(A1) | = | Opreste foaia de calcul executând celula ca formulăSe aplică la valori care încep cu =, +, - sau @. Aceasta este injecție de formulă. |
Literali și identificatori SQL
6Citește acestea; nu le scrie. Folosește interogări parametrizate în schimb.
| Escapare | Înseamnă | Când ai nevoie | În context |
|---|---|---|---|
| '' | ' | O ghilimă în interiorul unui literal șir — dublează-o | 'O''Brien' |
| "order" | order | Un cuvânt rezervat folosit ca nume de coloanăGhilimele duble sunt standardul; SQL Server folosește [paranteze]. | |
| `order` | order | Același în MySQL și MariaDB | |
| \% | % | Un literal % în interiorul unui tipar LIKE | |
| \_ | _ | Un literal _ în interiorul unui tipar LIKE | |
| $tag$ … $tag$ | ' | PostgreSQL citat dolar — nicio escapare în interiorul în totalUtil pentru corpuri de cod, unde dublarea fiecare citat este neinteligibil. |
Argumente shell
6Ghilimele simple sunt literale, ghilimele duble încă se extind variabile.
| Escapare | Înseamnă | Când ai nevoie | În context |
|---|---|---|---|
| '…' | $ ` \ | Totul din interior este literalCotarea cea mai sigură care există — dar nu poate conține o ghilimă simplă. | |
| "…" | * ? space | Glob și spații sunt sigure, variabilele încă se extindAlways quote variables: "$var", never bare $var. | |
| \ | Un spațiu într-un nume de fișier necitat | ||
| \$ | $ | Un semn dolar literal în interiorul ghilimelor duble | |
| \` | ` | O ghilimă inversă literală, nu o substituție de comandă | |
| '\'' | ' | O ghilimă simplă în interiorul ghilimelor simpleÎnchide, escapează, redeschide — nu există nicio modalitate de a o imbrica direct. |