2011-09-11 3 views
142

Sono uguali a XML, forse più lo spazio (& ampnbsp;)?Quali caratteri devono essere sfuggiti su HTML?

Ho trovato alcuni elenchi enormi di caratteri di escape HTML ma non credo che debbano essere escape . Voglio sapere cosa deve essere sfuggito a .

+6

Questa domanda presumibilmente presuppone un contenuto non antagonista. Se hai bisogno di integrare in modo sicuro contenuti controllati dagli hacker in HTML, consulta http://wonko.com/post/html-escaping. –

risposta

161

Se il documento è unicode, avete solo bisogno di fuggire gli stessi che per XML nel testo [spec] [doc]:

& becomes & 
< becomes &lt; 
> becomes &gt; 

In attributo valori devono anche sfuggire il carattere preventivo [spec]:

" becomes &quot; 
' becomes &#39; 

Se il documento è ASCII o un'altra codifica non Unicode e si utilizza chara non supportati, dovrai sfuggire a loro. Altrimenti, stai bene .

Di solito non si desidera uscire dagli spazi come &nbsp;. &nbsp; non è uno spazio normale, è uno spazio senza interruzioni [wiki]. È possibile utilizzare questi invece di spazi normali per evitare un'interruzione di linea da essere inserito tra due parole, o per inserire                     più                 spazio               senza che venga automaticamente collassato, ma non è necessario farlo molto spesso.


Stai bene, a patto che si sta inserendo il testo sfuggito qualche parte che ha senso per inserire testo ordinario (cioè non all'interno di un tag o <style><script>, e non all'interno di un valore di attributo). In caso contrario è necessario prendere altre precauzioni come indicato in daxelrod's answer e described here by the Open Web Application Security Project.

+3

Potresti citare qualche documentazione per l'affermazione che se il documento è in unicode hai solo bisogno di sfuggire alle 5 entità di carattere XML? Sono interessato a saperne di più. –

+0

@MichaelWaterfall: Non riesco a trovare alcuna documentazione che lo specifichi specificatamente, ma ho aggiunto riferimenti alla specifica HTML in cui menziona quali caratteri devono essere fatti sfuggire negli attributi e nel testo e aggiunto una nota a piè di pagina che indica "testo di escape" . L'unica altra ragione per cui è necessario utilizzare le entità HTML è rappresentare i caratteri che non possono essere rappresentati dal set di caratteri che si sta utilizzando, ma questo non può verificarsi con Unicode. –

+2

Il carattere '>' non ha mai bisogno di essere sfuggito. Il carattere '" '(rispettivamente' '') ha bisogno di essere scappato solo nel raro caso in cui appare all'interno di un valore di attributo che ha lo stesso carattere del delimitatore.Inoltre, nella sintassi HTML (come opposto a XHTML), caratteri' & 'e' <'non è sempre necessario essere sfuggiti, vedere le specifiche per i dettagli. –

3

Fondamentalmente ci sono tre caratteri principali che dovrebbero essere sempre sfuggiti nei file HTML e XML, in modo che non interagiscano con il resto dei markup, così come probabilmente ti aspetti, due di loro saranno la sinatax involucri, che sono <>, sono elencati di seguito:

1) &lt; (<) 

2) &gt; (>) 

3) &amp; (&) 

Inoltre possiamo usare virgolette doppie (") come " e la citazione singolo (') come & APOS

evitare di mettere dinamica contenuto in <script> e <style>. Queste non sono le regole per loro applicate. Ad esempio, se devi includere JSON in a, sostituisci < con \ x3c, il carattere U + 2028 con \ u2028 e U + 2029 con \ u2029 dopo la serializzazione JSON.)

HTML caratteri di escape: elenco completo: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php

Quindi è necessario per sfuggire <, o & quando seguito da tutto ciò che potrebbe iniziare un riferimento di carattere. Anche la regola sulla e commerciale è l'unica regola per gli attributi quotati, dato che le virgolette corrispondenti sono l'unica cosa che ne risolverà una. Ma se non vuoi terminare il valore dell'attributo lì, sfuggi alle virgolette.

Cambiare a UTF-8 mezzi ri-salvare il file:

Utilizzando la codifica dei caratteri UTF-8 per la tua pagina significa che è possibile evitare la necessità di la maggior parte delle fughe e solo di lavoro con i caratteri. Si noti, tuttavia, che per modificare la codifica del proprio documento, non è sufficiente modificare semplicemente la dichiarazione di codifica nella parte superiore della pagina o sul server. Si necessario ri-salvare il documento in quella codifica. Per informazioni sulla comprensione di come fare con l'applicazione, consultare Impostazione della codifica nel web applicazioni di creazione.

caratteri invisibili o ambigui:

Un ruolo particolarmente utile per fughe è quello di rappresentare i caratteri che sono invisibili o ambigue nella presentazione.

Un esempio potrebbe essere il carattere Unicode U + 200F MARCHIO DESTRA-A SINISTRA. Questo carattere può essere utilizzato per chiarire la direzionalità nel testo bidirezionale (ad esempio quando si utilizzano gli script in arabo o in ebraico). Tuttavia, non ha una forma grafica, , quindi è difficile vedere dove questi caratteri si trovano nel testo e, se vengono persi o dimenticati, possono creare risultati imprevisti di durante la modifica successiva. L'utilizzo di ‏ (o il suo carattere numerico equivalente di riferimento & # x200F;) rende invece molto semplice individuare questi caratteri.

Un esempio di carattere ambiguo è U + 00A0 NO-BREAK SPACE. Questo tipo di spazio impedisce l'interruzione di riga, ma appare come qualsiasi altro spazio quando viene utilizzato come carattere. L'utilizzo di   lo rende abbastanza chiaro dove tali spazi compaiono nel testo.