Comment puis-je échapper à des entités HTML lors de l'utilisation de ColdFusion fonction XMLFormat()?
J'ai le bloc suivant de HTML:
<p>The quick brown fox jumps over the lazy dog — The quick brown fox jumps over the lazy dog.</p>
<p>The quick brown fox jumps over the lazy dog — The quick brown fox jumps over the lazy dog.
<br>The quick brown fox jumps over the lazy dog — The quick brown fox jumps over the lazy dog.
Il n'est PAS valide XHTML. Cependant, j'ai besoin d'inclure ce code HTML dans un document XML. J'ai essayé d'utiliser XMLFormat()
afin de convertir la <
à <
et la >
à >
, qui fonctionne très bien. Malheureusement, il convertit également —
à &mdash;
, ce qui n'est pas valide et renvoie une exception dans la CFXML tag.
<cfxml variable="myXML">
<content>#XMLFormat(myHTML)#</content>
</cfxml>
Comment puis-je contourner ce problème?
Est le bloc de code HTML stockées dans la base de données connue pour être compatible XHTML?
non, le contenu HTML n'est pas valide XHTML
non, le contenu HTML n'est pas valide XHTML
OriginalL'auteur Eric Belair | 2010-02-02
Vous devez vous connecter pour publier un commentaire.
Vous avez un peu d'options. Beaucoup dépend de la façon dont ce contenu est destiné à être utilisé. Il serait extrêmement utile d'inclure une sortie souhaitée document, ainsi que d'indiquer lorsque ce document xml est utilisé.
Si vous ne voulez pas salir avec le contenu de l'HTML, vous pouvez toujours utiliser CDATA, comme ceci:
Aussi, je sais que vous dites que vous ne voulez pas de convertir le reste des arobases, mais je ne vois pas comment il en est ainsi. Le contenu HTML est une chaîne de caractères que vous souhaitez processus, dans lequel cas, il devrait être échappé de sorte qu'il peut être sans échappement plus tard, ou s'il est valable XML que vous souhaitez faire partie de ce document. Je veux dire, quand vous traiter le contenu de la
<content>
tag plus tard, vous allez courir dans des problèmes si l'esperluette ne sont pas échappé.Pourquoi est-CDATA pas une option?
Quel type de CMS? Fondamentalement, rien de tout cela fait sens. Si vous importez le texte, alors tout doit être échappé, y compris les &emdash;. &mdash; est totalement valide et ne doit pas jeter une exception dans le CFXML tag. Vous avez probablement fait quelque chose de mal.
Je crois qu'il est Imbriqué. @Anthony, je ne suis pas sûr pourquoi CDATA n'est pas une option, mais je pense que le CMS script d'import - hors de mon contrôle n'est pas configuré pour gérer.
Bon, tellement Imbriqués va importer tout le texte entre les <contenu></contenu> balises? Est-il alors va unscape en HTML? Si oui, alors oui, vous AVEZ à XMLFormat tout.
OriginalL'auteur Jordan Reiter
Malheureusement cette réponse:
est insuffisante si vous arrive d'avoir le code html incorrect que vous souhaitez afficher. considérons le cas où myHTML contient:
Autant que je sache, il n'existe aucun moyen de coldfusion pour faire le bon encodage de potentiellement des données non valides. Votre meilleur pari est d'écrire vous-même une fonction de filtre qui entité code html spéciaux et des caractères illégaux.
OriginalL'auteur dgc
C'est plus difficile quand vous avez quelques HTML partiellement converti, et que vous devez ensuite faire le reste...
Vous pouvez remplacer tous les "&" les signes temporairement, exécutez la XMLFormat, puis de convertir les "&" les signes de retour.
Si cela fonctionne, vous pourriez faire un pas en les enveloppant de cette logique, en une seule fonction.
OriginalL'auteur Dan Sorensen
Comment sur tout simplement pas à l'aide de
—
échapper dans la chaîne source et au lieu de cela, y compris le caractère in situ.Modifier:
Je vais deviner que le code HTML du contenu stocké dans la base de données n'est pas connu pour être compatible XHTML et donc de le mettre dans un document XML, vous n'avez pas le choix, soit la placer dans une section CDATA ou encoder correctement. Il ya une hypothèse que de le placer dans un document XML comme cela est utile et qu'il peut être correctement décodé à l'consommer fin. Ce sera vrai de l'un et l'autre cas typique d'un DOM XML est utilisé à la consommation.
Donc ce qui m'amène à cette quesion, ce qui est en fait, le problème avec
&mdash
? Après tout<
entraînera<
etc. Lorsqu'elles sont récupérées à partir d'un DOM par le consommateur, la chaîne résultante sera retourné à l'aide de—
et<
et ainsi de suite, quand par la suite utilisé comme HTML, tout ira bien.OriginalL'auteur AnthonyWJones
Pour le moment, je suis simplement ce qui va remplacer toutes inférieur à et supérieur à caractères avec "
<
" et ">
", respectivement.OriginalL'auteur Eric Belair
Dans ce cas d'utilisation spécifiques, vous pouvez utiliser URLEncodedFormat (), afin de préserver la forme naturelle du contenu, et ensuite utiliser URLDecode() sur le moyen de sortir.
Je ne recommande pas cela comme une meilleure pratique, mais seulement qu'il serait de travailler dans le scénario posés par la question.
OriginalL'auteur jalpino
HTMLEditFormat(chaîne) doit convertir vos inférieur et supérieur des signes, mais prendra également en charge de l'esperluette. Je comprends que vous voulez quitter le — comme-est. Il est intéressant de souligner que — n'est pas l'un des XML de des entités prédéfinies (bien que vous pouvez le définir).
J'ai juste pensé que je le mentionne, comme HTMLEditFormat() est idéal pour s'échapper HTML à inclure dans les documents XML, tels que les Atom. On dirait qu'elle n'est pas la solution pour votre cas d'utilisation spécifiques, cependant.
OriginalL'auteur cherdt