2011-03-16 17 views
25

Devo evitare le virgolette all'interno di un valore di attributo html? Quali personaggi sono ammessi?Quali valori posso inserire in un valore di attributo HTML?

È valido?

<span title="This is a 'good' title.">Hi</span> 
+0

Partenza title sulle più recenti specifiche HTML5: http://dev.w3.org/html5/spec/Overview.html#the-title-attribute Credo che l'attributo title utilizza il tipo CDATA che è definito qui: http://www.w3.org/TR/html401/types.html # type-cdata –

+0

Chiede solo e commerciale: http://stackoverflow.com/questions/3705591/do-i-encode-ampersands-in-a-href (purtroppo non è venuto prima, quindi non fare il duplicato ...) –

risposta

37

Se il valore di attributo è citato (inizia e termina con virgolette "), quindi sono consentiti tutti i caratteri tranne le virgolette e le e commerciali, che devono essere indicati comerispettivamentee &amp; (o l'equivalente riferimenti di entità numeriche, &#34; e &#38;)

È possibile anche usare le virgolette singole attorno ad un valore di attributo. Se si esegue questa operazione, è possibile utilizzare le doppie virgolette letterali all'interno dell'attributo: <span title='This is a "good" title.'>...</span>. Per evitare le virgolette singole all'interno di tale valore di attributo, è necessario utilizzare il riferimento numerico di entità &#39; poiché alcuni browser non supportano l'entità denominata, &apos; (che era not defined in HTML 4.01).

Inoltre, è anche possibile creare attributi senza virgolette, ma che limita il set di caratteri che si possono avere al suo interno molto più in là, non consentire l'uso di spazi, =, ', ", <, >, ` nell'attributo .

Vedere the HTML5 spec per ulteriori dettagli.

+1

Qual è il motivo per cui si richiede di uscire dalla e commerciale '' Cosa può rappresentare? –

+5

Ah, ok, è perché la stessa e commerciale sarebbe stata analizzata come entità altrimenti. –

+4

Il segno e commerciale è un carattere valido in un valore di attributo. La specifica proibisce "ambiguo e commerciale" che è la combinazione di (e commerciale + caratteri alfanumerici + punto e virgola) dove non corrisponde a nessuno dei riferimenti nominati. '' - valido '' - non valido – Semra

3

Il valore può essere qualsiasi cosa, ma si dovrebbe sfuggire citazioni (&quot;, &apos;), delimitatori di tag (&lt;, &gt;) e commerciali (&amp;).

+0

Questo non sembra corretto (vedi il link alle specifiche nelle altre risposte). – Christophe

+0

non sembra non consentire lo <, > ecc. La specifica non consente solo e commerciali. – arviman

4

Ciò è valido. Tuttavia, se si dovesse mettere le virgolette dentro, si dovrà fuggire con &quot; come questo:

<span title="This is a &quot;good&quot; title.">Hi</span> 
1

Sì, va bene. Il problema sarebbe quando provi a inserire un doppio preventivo all'interno di un attributo. in questo modo:

<span title="This is a "bad" title.">Hi</span> 

Si può ovviare a questo utilizzando entità HTML in questo modo:

<span title="This is a &quot;good&quot; title">Hi</span> 
0

Ecco una funzione di validazione usando un'espressione regolare in base alla risposta di Brian Campbell, per caso peggiore di un non quotate attributo.

validator: function (val) { 
    if (!val || val.search(/['"=<>`]+|(&\s)+/) === -1) return true; 
    return 'Disallowed characters in HTML attributes: \' " = < > ` &.'; 
}, 
Problemi correlati