Quando si dovrebbero usare le entità HTML?


115

Questo mi confonde da tempo. Con l'avvento di UTF-8 come standard de facto nello sviluppo web non sono sicuro in quali situazioni dovrei usare le entità HTML e per quali dovrei usare solo il carattere UTF-8. Per esempio,

  • trattino em (-, &emdash;)
  • e commerciale (&, &)
  • Frazione 3/4 (¾, ¾)

Per favore, fai luce su questo problema. Sarà apprezzato.


In una nota a margine, cosa farà htmlentities () in PHP?
Joe Phillips

Leggendo le risposte ei commenti mi sembra che non ci sia ancora una regola universale a favore dell'una o dell'altra, e la risposta comunque è dipende .
Majid Fouladpour

Risposte:


76

In genere non è necessario utilizzare entità carattere HTML se l'editor supporta Unicode. Le entità possono essere utili quando:

  • La tua tastiera non supporta il carattere che devi digitare. Ad esempio, molte tastiere non hanno il trattino lungo o il simbolo del copyright.
  • Il tuo editor non supporta Unicode (molto comune alcuni anni fa, ma probabilmente non oggi).
  • Vuoi rendere esplicito nella fonte ciò che sta accadendo. Ad esempio, il  codice è più chiaro del carattere di spazio vuoto corrispondente.
  • Hai bisogno di fuggire HTML caratteri speciali come <, &o ".

1
Molto utile. Grazie. Uso un programma utile per ottenere caratteri insoliti. Si chiama popchar ed è prodotto da Ergonis ma è solo per OS X.
allesklar

3
Nota a margine: Wikipedia richiede ancora &nbsp;invece del carattere di spazio bianco effettivo, in parte perché Firefox converte U + 00A0 in U + 0020 nelle forme. Quindi utilizzare l'entità in quel caso è l'unico modo per garantire che la fonte non venga incasinata ogni volta che un utente di Firefox la modifica.
Joey

2
Un bel riepilogo, ma per quanto riguarda l'ultimo punto, è <che spesso deve essere eseguito l'escape, mai >(e "deve essere eseguito solo raramente all'interno dei valori degli attributi).
Jukka K. Korpela

Un altro motivo per mantenere & nbsp; è così che puoi visualizzare più spazi su una pagina HTML.
zylstra

Quindi &amp;dovrebbe sempre essere usato al posto di &? C'è una ragione per questo?
Prometeo

116

Sulla base dei commenti che ho ricevuto, ho approfondito ulteriormente la questione. Sembra che attualmente la migliore pratica sia quella di rinunciare all'utilizzo di entità HTML e utilizzare invece il carattere UTF-8 effettivo . I motivi elencati sono i seguenti:

  1. Le codifiche UTF-8 sono più facili da leggere e modificare per coloro che comprendono il significato del carattere e sanno come digitarlo.
  2. Le codifiche UTF-8 sono altrettanto incomprensibili delle codifiche di entità HTML per coloro che non le capiscono, ma hanno il vantaggio di essere visualizzate come caratteri speciali piuttosto che difficili da comprendere codifiche decimali o esadecimali.

Finché la codifica della tua pagina è impostata correttamente su UTF-8, dovresti utilizzare il carattere effettivo invece di un'entità HTML. Ho letto diversi documenti su questo argomento, ma i più utili sono stati:

Dal UTF-8: Il Segreto di codifica dei caratteri articolo:

Wikipedia è un ottimo caso di studio per un'applicazione che originariamente utilizzava ISO-8859-1 ma è passata a UTF-8 quando è diventato troppo macchinoso per supportare le lingue straniere. I robot ora esamineranno effettivamente gli articoli e convertiranno le entità dei personaggi nei loro corrispondenti personaggi reali per motivi di facilità d'uso e ricercabilità .

L'articolo fornisce anche un bell'esempio sulla codifica cinese. Ecco l'esempio abbreviato per amore della pigrizia:

UTF-8:

這兩個字是甚麼意思

Entità HTML :

&#36889;&#20841;&#20491;&#23383;&#26159;&#29978;&#40636;&#24847;&#24605;

Le codifiche delle entità UTF-8 e HTML sono entrambe prive di significato per me, ma almeno la codifica UTF-8 è riconoscibile come lingua straniera e verrà visualizzata correttamente in una casella di modifica. L'articolo prosegue dicendo quanto segue sulla versione HTML con codifica entità:

Estremamente scomodo per quelli di noi che sanno davvero cosa sono le entità dei personaggi, totalmente incomprensibili ai poveri utenti che non lo sanno! Anche le entità carattere leggermente più user-friendly e "intelligibili" come & theta; lascerà gli utenti che non sono interessati all'apprendimento dell'HTML a grattarsi la testa. D'altra parte, se vedono θ in una casella di modifica, sapranno che è un carattere speciale e lo tratteranno di conseguenza, anche se non sanno come scrivere quel personaggio da soli.

Come altri hanno notato, devi ancora utilizzare le entità HTML per i caratteri XML riservati (e commerciale, minore di, maggiore di).


Questa risposta aiuta moltissimo. Ma per chiarire, per la mia comprensione: non c'è nulla di rischioso o non valido nell'usare la &entity;sintassi all'interno di un documento HTML con un set di caratteri UTF-8 dichiarato, corretto? Mentre i semplici caratteri UTF-8 sono migliori per i motivi che hai elencato, non c'è alcun problema ad avere ancora alcune entità HTML insieme a loro nello stesso documento?
Jacob Ford,

@JacobFord Esatto, mescolare entità HTML con caratteri UTF-8 non è rischioso o non valido, solo potenzialmente fonte di confusione per qualcuno che legge la fonte.
William Brendel

5

Non userei UTF-8 per caratteri facilmente confusi visivamente. Ad esempio, è difficile distinguere un emdash da un meno, o soprattutto uno spazio unificatore da uno spazio. Per questi personaggi, usa sicuramente le entità.

Per i caratteri che sono facilmente comprensibili visivamente (come gli esempi cinesi sopra), vai avanti e usa UTF-8 se lo desideri.


5

Personalmente faccio tutto in utf-8 da molto tempo, tuttavia, in una pagina html, devi sempre convertire i caratteri e commerciale (&), maggiore di (>) e minore di (<) nelle loro entità equivalenti, & amp ;, & gt; e & lt;

Inoltre, se hai intenzione di fare un po 'di programmazione usando il testo utf-8, ci sono alcune cose da tenere d'occhio.

  • XML necessita di alcune righe aggiuntive per la convalida quando si utilizzano le entità.
  • Alcune librerie non funzionano bene con utf-8. Ad esempio, PHP in alcune distribuzioni Linux ha abbandonato il supporto completo per utf-8 nelle loro librerie di espressioni regolari.
  • È più difficile limitare il numero di caratteri in un testo che utilizza entità html, perché una singola entità utilizza molti caratteri. Inoltre c'è sempre il rischio di tagliare l'entità a metà.

È un punto molto minore, ma non è necessario codificare maggiore di (>), solo minore di (<).
Codemonkey

4

Le entità potrebbero procurarti un po 'di compatibilità con i client cerebrali che non capiscono correttamente le codifiche. Non credo che includa i browser attuali, ma non sai mai quali altri tipi di programmi potrebbero colpirti.

Più utile, tuttavia, è che le entità HTML ti proteggono dai tuoi errori: se configuri male qualcosa sul server e finisci per servire una pagina con un'intestazione HTTP che dice che è ISO-8859-1e un METAtag che dice che è UTF-8, almeno il tuo & mdash; es funzionerà sempre.


5
Tuttavia, potresti fare l'argomento opposto: &mdashse le intestazioni vengono visualizzate correttamente anche se le intestazioni sono configurate in modo errato, è più difficile rilevare che c'è un problema.
Pekka

4

Le entità HTML sono utili quando si desidera generare contenuto che verrà incluso (dinamicamente) in pagine con (diverse) codifiche diverse. Ad esempio, abbiamo contenuto white label che è incluso sia nelle pagine web con codifica ISO-8859-1 che UTF-8 ...

Se la conversione del set di caratteri da / a UTF-8 non fosse un grosso pasticcio inaffidabile (incappi sempre in alcuni caratteri e alcuni strumenti che non si convertono correttamente), la standardizzazione su UTF-8 sarebbe la strada da percorrere.


2

Se le tue pagine sono codificate correttamente in utf-8 non dovresti avere bisogno di entità html, usa solo i caratteri che desideri direttamente.


3
Penso che ti serviranno ancora per codificare i caratteri riservati.
rmeador

@rmeador - Sono d'accordo con quello.
Otávio Décio

2

Tutte le risposte precedenti hanno senso per me.

Inoltre: dipende principalmente dall'editor che intendi utilizzare e dalla lingua del documento. Come requisito minimo per l'editor è che supporti il ​​linguaggio del documento. Ciò significa che se il tuo testo è in giapponese, fai attenzione a usare un editor che non lo mostra (cioè nessuna entità per il documento stesso). Se è inglese, puoi anche usare un vecchio editor simile a vim e usare le entità solo per il & copy; e amici. Ovviamente: & gt; for> e altri HTML speciali necessitano ancora di escape. Ma anche con le altre lingue latine-1 (tedesco, francese, ecc.) Scrivere ä è una seccatura, sai dove ...

Inoltre, scrivo personalmente entità per caratteri invisibili e quelli che sembrano simili a standard-ascii e sono quindi facilmente confusi. Ad esempio, c'è u1173 (che sembra un trattino in alcuni set di caratteri) o u1175, che assomiglia alla barra verticale. In ogni caso, userò le entità per quelle.


& gt; NON è necessario per>, puoi semplicemente usare>. & lt; È necessario per <, però.
Codemonkey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.