funzione PHP per accendere “Descrizione” arbitrario in dati XML validi per podcast feed

StackOverflow https://stackoverflow.com/questions/3163142

  •  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>&copy; 2005 John Doe</copyright>

<! — valid xml — >
<copyright>&#xA9; 2005 John Doe</copyright>
  

A differenza HTML , supporti XML solo cinque   "entità personaggio di nome":

character   name               xml
&           ampersand          &amp;
<           less-than sign     &lt;
>           greater-than sign  &gt;
’           apostrophe         &apos;
"           quotation          &quot;
  

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             &#xA9;
℗           sound recording copyright  &#x2117;
™           trade mark sign            &#x2122;
  

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?

È stato utile?

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 con htmlspecialchars e una decodifica precedente html entités con mb_convert_encoding).

Se la codifica del file XML è UTF-8, si può semplicemente rimuovere le entità. Supponiamo di avere il seguente codice HTML frammento:

&copy; 2005 John Doe

Poi, si può solo fare:

$data = "&copy; 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top