Der RSS Creater funktioniert so, mit nummerischen Entities, formal richtig, das erzeugte XML ist wohlgeformt.
Leider werden von vielen RSS-Lesern, auch dem von Contenido, die nummerischen Entities nicht in die Sonderzeichen zurück verwandelt sondern der Entity-Code ausgegeben.
Wenn im XML-Kopf das richtige Encoding angegeben ist sollte auf die Ausgabe der Sonderzeichen als Entities verzichtet werden, ausgenommen der reservierten Zeichen ( <,>,".',&) die für wohlgeformtes XML immer in Entities umgewandelt werden müssen (dafür die PHP-Funktion htmlspecialchars() ).
Ich verwende nun folgenden Code:
Code: Alles auswählen
function prepareStringForOutput($sIn) {
$sIn = str_replace(' ',' ',$sIn);
$sIn = str_replace(' ',' ',$sIn);
#$sIn = str_replace(chr(13).chr(10),' ',$sIn);
$sIn = str_replace('&','&',$sIn);
$sIn = html_entity_decode($sIn, ENT_QUOTES, "ISO-8859-1");
return htmlspecialchars($sIn, ENT_QUOTES);
}
Die function htmlnumericalentities ist dann unnötig geworden.
Um einen UT8-Feed zu erzeugen müsste man das Encoding im XML-Kopf ändern und die Ausgabe mit der PHP-Funktion utf8_encode() übersetzten.
Das habe ich aber noch nicht ausprobiert.