Domanda

Ho un problema con un feed rss.

Quando lo faccio <title>This is a title </title>

Il titolo appare bene nel feed

Ma quando lo faccio $ title = " questa è una " ;;

inclinata
<title><![CDATA['$title']]></title>

Il titolo non appare affatto.


Non funziona ancora. Genero il mio feed rss in modo dinamico e sembra così:

$item_template="
      <item>
         <title>[[title]]</title>
         <link>[[link]]</link>
         <description><![CDATA[[[description]]]]></description>
         <pubDate>[[date]]</pubDate>
      </item>
      ";

e in un ciclo:

$s.=str_replace(
array("[[title]]","[[link]]","[[description]]","[[date]]"),
array(htmlentities($row["title"]),$url,$description,$date),
$item_template);

Il problema è in particolare quando il titolo ha un simbolo dell'euro. Quindi viene visualizzato nel mio validatore rss come:

Â\x80

Informazioni più dettagliate:

Ok, ho avuto difficoltà con questo negli ultimi giorni e non riesco a trovare una soluzione. Quindi inizierò una taglia. Ecco maggiori informazioni:

  • Le informazioni contenute nel feed sono archiviate in un database latino 1 (che gestisco)
  • Il problema appare quando nel database è presente un simbolo dell'euro. Non importa se è come & # 8364; o &euro;
  • Il simbolo dell'euro a volte appare come strani personaggi o come & # 194; \ x80
  • Provo a risolvere il problema sul lato feed non sul lato lettore.
  • Il codice completo è disponibile qui: codedump
  • Avanti: a volte quando il simbolo dell'euro non può essere analizzato l'elemento (il titolo o la descrizione) viene mostrato vuoto. Quindi se guardi la fonte quando mostri il feed in un browser troverai <title></title>

Se sono necessarie ulteriori informazioni, si prega di chiedere.

È stato utile?

Soluzione

Il problema è il codice di emissione; cambi il tempo

echo '<title><![CDATA[$title]]></title>';

a

echo '<title><![CDATA[' . $title . ']]></title>';

Come nota a margine, tieni presente quanto segue: non rispondere alla tua domanda con un follow-up, ma modifica quello originale. Non usare regexps senza una buona ragione. Non indovinare.

Invece, fai quello che avresti dovuto fare da sempre: racchiudi il titolo in htmlentitites ed esegui, come in:

echo '<title>' . htmlentities($title, ENT_NOQUOTES, [encoding]) . '</title>';

Sostituisci [encoding] con la codifica dei caratteri che stai utilizzando. Molto probabilmente, si tratta di "UTF-8". Questo è necessario perché php (& Lt; 6) usa ISO-8859-1 di default e non c'è modo di esprimere ad es. l'euro firma quella codifica. Per ulteriori informazioni, fare riferimento a questa introduzione ben scritta .

Ti suggerisco anche leggere di XML . Inizia con il secondo capitolo.

Altri suggerimenti

Usa htmlspecialchars() invece di htmlentities().

I feed RSS / ATOM non sono HTML, quindi non è possibile utilizzare entità HTML al loro interno. XML ha solo cinque entità definite per impostazione predefinita , quindi puoi & # 8217; utilizzare &euro;. Dato che & # 8217; stai usando UTF & # 8212; usa il simbolo dell'euro letterale, senza conversione (no htmlentities), ma con la fuga di altri caratteri sensibili (htmlspecialchars).

E questo sarebbe completamente valido RSS / XML. Se questo non risolve il problema, significa che si trova altrove (per favore forniscimi la fonte grezza generata dell'RSS per ulteriore aiuto).

Quale linguaggio di programmazione o ambiente usi? Ad esempio, in PHP le virgolette singole impediscono di valutare le variabili all'interno.

Altrimenti, in questo caso non hai davvero bisogno di quelle citazioni. Forse sei stato confuso dalla sintassi dell'array di PHP.

Quindi è meglio scrivere:

<title><![CDATA[$title]]></title>

Non capisco perché dovresti usare una funzione di codifica. Quando una terza parte prende il tuo contenuto, non ci sarà idea di come decodificare quella stringa. penso che - dovresti usare CDATA per tag che potrebbero rompere de XML - Utilizzare librerie ben definite per scrivere XML. Per PHP: DomDocument o XML Writer (http://php.net/manual/en/book.xmlwriter.php)

Credo che il profilo RSS non lo consenta: questo documento afferma che title contiene, i dati sui caratteri che sono ulteriormente definiti come segue .

Questo articolo può essere utile per informazioni sull'euro firmare e supportare in vari contesti. Alcuni dei suggerimenti di quell'articolo includono l'uso di &#8364; o &euro; o semplicemente la sostituzione del segno con la parola & Quot; euro. & Quot; Buona fortuna!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top