php xml de sortie produit parse error “ ”
Est-il une fonction que je peut utiliser pour analyser toute la chaîne pour s'assurer qu'il ne cause pas d'analyse xml problèmes? J'ai un script php de la sortie d'un fichier xml avec du contenu obtenu à partir de formulaires.
La chose est, en dehors de l'habituel chaîne de chèques à partir de php, une partie du texte utilisateur provoque des erreurs xml. Je suis confronté à ce "’
" en particulier. C'est l'erreur que je reçois Entity 'rsquo' not defined
Quelqu'un a une expérience dans l'encodage du texte de sortie xml?
Merci!
Quelques précisions:
Je suis sortie de contenu à partir de formes dans un fichier xml, qui est ensuite analysé par javascript.
Je traiter toutes les entrées d'un formulaire avec: htmlentities(trim($_POST['content']), ENT_QUOTES, 'UTF-8');
Quand je veux à la sortie de ce contenu dans un fichier xml, comment dois-je coder en sorte qu'il ne sera pas jeter erreurs xml?
Jusqu'à présent, le suivant 2 solutions:
1) echo '<content><![CDATA['.$content.']]></content>';
2) echo '<content>'.htmlspecialchars(html_entity_decode($content, ENT_QUOTES, 'UTF-8'),ENT_QUOTES, 'UTF-8').'</content>'."\n";
Sont au-dessus de 2 solutions de sécurité? Qui est le meilleur?
Merci, désolé de ne pas fournir cette information plus tôt.
Exactement.
Le problème ici est que le XML ne sais seulement que quelques entités spécifier références de caractère. (Voir w3.org/TR/xml/#sec-predefined-ent)
OriginalL'auteur Lyon | 2010-06-29
Vous devez vous connecter pour publier un commentaire.
Vous prenez le mauvais chemin - ne cherchez pas un analyseur qui ne vous donne pas les erreurs. Au lieu d'essayer d'avoir un xml bien formé.
Comment avez-vous
’
de l'utilisateur? Si il a littéralement tapé dans quelque chose, vous ne sont pas le traitement de l'entrée correctement - par exemple, vous devez échapper à &&
. Si c'est vous qui mettez l'entité, (peut-être à la place de l'apostrophe), soit la définir dans la DTD (<!ENTITY rsquo "&x2019;">
) ou écrire à l'aide d'une notation numérique (’
), parce que presque toutes les entités nommées sont une partie de code HTML. XML définit seulement quelques-uns de base, que le Gombo souligné.MODIFIER basé sur les ajouts à la question:
]]> <°)))><
, vous avez un problème.vous faites de l'encodage et de décodage qui aboutissent à la valeur d'origine de l' $contenu.le décodage ne devrait pas être nécessaire (si vous ne vous attendez pas aux utilisateurs de poster des valeurs comme&
qui doit être interprété comme &).Si vous utiliser htmlspecialchars() avec ENT_QUOTES, il devrait être ok, mais voir comment Drupal est-il.
htmlentities($_POST['content'], ENT_QUOTES, 'UTF-8');
. sleepynate la suggestion d'utiliser html_entity_decode fixe’
qu'il a converti en arrière..mais ensuite j'ai eu des problèmes avec&
. Que dois-je faire? Est-cehtmlspecialchars(html_entity_decode($content, ENT_QUOTES, 'UTF-8'),ENT_QUOTES, 'UTF-8')
suffisant pour assurer à l'avenir les entrées de l'utilisateur ne sera pas causer des problèmes avec mon fichier xml? J'ai besoin d'un fichier xml à être exempt d'erreur depuis une fonction javascript est l'analyse.Est-il une quelconque raison, vous devez utiliser htmlentities() et ne pas htmlspecialchars()?
sans raison particulière, en fait..serait htmlspecialchars() suffit pour traiter toutes les entrées de l'utilisateur? quand on utilise htmlentities() alors?
donc en fait, si je suis déjà de traitement, d'enregistrement et de sortie entrées à tous en utf-8, je n'aurais pas besoin htmlentities et htmlspecialchars suffirait? Merci!
Peut-être que vous pourriez utiliser htmlentities() pour produire un document contenant des caractères unicode, tout en préservant la plaine de codage ASCII. Mais cela n'est vrai que si vous aussi code les caractères d'entités numériques. Je ne sais pas.
OriginalL'auteur Krab
Mettre la valeur à l'intérieur de balises CDATA.
De la site w3schools:
Bonjour tout le monde!]]>
C'est la réponse correcte où RSS est intéressé, à moins que vous êtes à l'aide de DTD XHTML. Particulièrement utile lors de la sortie des flux en utilisant
content:encoded
dans unCDATASection
.OriginalL'auteur Joseph
’
erreur, mais apporte&
erreurs maintenant? Si je change&
à&
il fixe l'erreur, mais comment puis-je décoder tout correctement?Vous devriez peut-être nous montrer ce que vous êtes en train de faire.
yep. je suis sortie en utf-8. mon xml de sortie commence avec
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
merciOriginalL'auteur sleepynate
Le problème, c'est que votre
htmlentities
fonction fait ce qu'elle doit - génération de code HTML, des entités de caractères. Vous êtes l'insertion de ces éléments dans un document XML qui n'ont pas le HTML des entités définies (des choses comme’
sont spécifiques HTML).La meilleure façon de gérer cela est de garder toutes les entrées brutes (c'est à dire ne pas analyser avec
htmlentities
), puis générer votre code XML à l'aide de PHP, XML fonctions.Cela permettra d'assurer que tout le texte est codé correctement, et votre XML est bien formé.
Exemple:
OriginalL'auteur porges
J'ai eu un problème similaire que les données dont j'ai besoin pour ajouter le XML était déjà retourné par mon code que htmlentities() (pas dans la base de données de ce genre).
j'ai utilisé:
ou si elle n'était pas déjà dans htmlentities()
juste au-dessous devrait fonctionner
essentiellement l'aide de htmlspecialchars avec ENT_XML1 doit obtenir de l'utilisateur des données imputées dans le XML de données sûre (et fonctionne très bien pour moi):
OriginalL'auteur Ford
Utiliser htmlspecialchars() permettra de résoudre votre problème. Voir le post ci-dessous.
PHP Est htmlentities() suffisante pour la création de xml-les valeurs sûres?
OriginalL'auteur Tahir Yasin
Devrait le faire.
OriginalL'auteur tfont