2010-10-08 5 views
4

J'ai créé un flux XML UTF-8 basé sur le Web pour une application iPhone.Utilisation du signe dièse britannique dans un flux XML à lire par un iPhone

Lors de l'affichage dans un navigateur Web, si l'aliment contient un livre anglaise, je reçois une erreur de XML méchant: XML Erreur d'analyse: entité non définie

Cependant, le fichier réel semble être lisible.

1. Est-ce qu'un NSParser iPhone sera capable de lire le fichier ou échouera-t-il à cause de ce caractère?

2. Est-il possible d'encoder le signe dièse pour XML?

+0

Pourquoi l'encoder si c'est UTF-8? –

+1

Vérifiez que le signe dièse est enregistré en tant que séquence d'octets 'c2 a3' à l'aide d'un éditeur hexadécimal. Si ce n'est pas le cas, le texte est enregistré sous un autre encodage. – McDowell

Répondre

5

Ma solution finale qui semble fonctionner dans tous les cas est de remplacer tous les caractères spéciaux tels qu'ils sont entrés.

public function xmlEntities($text) 
    { 
    $search = array('&','<','>','"','\'', chr(163), chr(128), chr(165)); 
    $replace = array('&amp;', '&lt;', '&gt;', '&quot;', '&apos;', '&#163;', '&#8364;', '&#165;'); 

    $text = str_replace($search, $replace, $text); 

    return $text; 
    } 
8

Vous pouvez simplement utiliser l'entité &#163;.

11

if the feed contains a British Pound sign, I get a nasty XML error: XML Parsing Error: undefined entity

Votre flux utilise probablement l'entité &pound; comme caractère dièse. &pound; est une entité HTML et ceux-ci ne peuvent pas être utilisés sans les déclarer avec une DTD associée à (ou incorporée) dans votre document XML. Si l'entité n'est pas définie, l'analyseur XML signale qu'il a trouvé une entité inconnue.

Comme vous avez dit que votre flux est encodé en UTF-8, vous pouvez utiliser le caractère dièse en tant que tel - pas besoin d'entité. Comme LukeH l'a suggéré, l'autre solution consiste à utiliser la référence de caractère &#163; qui sera lue comme caractère dièse par l'analyseur XML.

0

Comme vous l'avez montré un extrait de code PHP ...

J'ai eu le même problème, mais votre échantillon xmlEntities (texte de $) {...} fonction ne fonctionne pas au-dessus. Changer pour juste htmlspecialchars() a fonctionné cependant - comme (dans mon cas) je me soucie seulement des caractères qui bousilleraient l'analyse du document XML (<,> etc), tout le reste devrait être valide unicode ..

Questions connexes