funzione PHP per accendere “Descrizione” arbitrario in dati XML validi per podcast feed
-
02-10-2019 - |
Domanda
Sto leggendo la documentazione per la creazione di un podcast feed adatto per iTunes e il Errori comuni dice :
Utilizzo di HTML denominato entità carattere.
<! — illegal xml — >
<copyright>© 2005 John Doe</copyright>
<! — valid xml — >
<copyright>© 2005 John Doe</copyright>
A differenza HTML , supporti XML solo cinque "entità personaggio di nome":
character name xml
& ampersand &
< less-than sign <
> greater-than sign >
’ apostrophe '
" quotation "
I cinque personaggi di cui sopra sono l'unica caratteri che richiedono la fuga in XML. Tutti gli altri caratteri possono essere inserito direttamente in un editor che supporti UTF-8. È inoltre possibile utilizzare riferimenti a caratteri numerici che specificare l'Unicode per il carattere, per esempio:
character name xml
© copyright sign ©
℗ sound recording copyright ℗
™ trade mark sign ™
Per ulteriori riferimenti vedi XML Carattere e EntityReferences .
In questo momento sto usando htmlentities()
sotto PHP5 e l'alimentazione è la convalida e di lavoro. Ma da quanto ho capito alcune cose che potrebbero avere messo in contenuti potrebbe diventare entità che renderebbe non più validi. Qual è la funzione migliore da utilizzare per assicurare non sto passando dati non validi? Sono paranoico qualcosa otterrò entrato e ottenere entità-ized e rompere il feed - devo solo usare str_replace()
e sostituirlo con entità con nome e lasciare il resto da sola? O posso usare htmlspecialchars()
in qualche modo?
Così, in breve, che cosa è un rimpiazzo per htmentities()
che farà in modo di ingresso è sicuro per la descrizione, i titoli, ecc in un podcast feed RSS?
Soluzione
È possibile:
- Usa un blocco CDATA invece (solo assicurarsi che si sta utilizzando la codifica corretta, vale a dire, la codifica del file XML corrisponda alla codifica dei dati). L'unica cosa che dovete ricerca di è
]]>
, che non può essere messo letteralmente in un blocco CDATA. - Uso
mb_encode_numericentity
anzichéhtmlentities
(eventualmente combinati conhtmlspecialchars
e una decodifica precedente html entités conmb_convert_encoding
).
Se la codifica del file XML è UTF-8, si può semplicemente rimuovere le entità. Supponiamo di avere il seguente codice HTML frammento:
© 2005 John Doe
Poi, si può solo fare:
$data = "© 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");