9
votes

Décodez des entités HTML numériques dans ColdFusion?

J'ai besoin d'un moyen de transformer les entités html numériques en équivalent de caractère clair-texte. Par exemple, je voudrais activer l'entité: xxx

dans le caractère: xxx

à travers certains googling autour, j'ai trouvé une fonction appelée HTMLuneDitformat , mais cette fonction ne transforme que les entités nommées . Existe-t-il un moyen de décoder des entités numériques dans ColdFusion?


1 commentaires

Vous pouvez trouver cela également utile:


4 Réponses :


1
votes

Il devrait être assez facile de coder un à vous-même. Il suffit de modifier le FUNC HTMLUNEDITFORMAT () que vous avez trouvé, pour les inclure à la fin des mattiles et des lentishashars.


4 commentaires

Je pense qu'il y a quelque chose comme plus de 100 000 entités numériques potentielles. Je pourrais certainement ajouter quelques centaines de centaines d'entités les plus utilisées, mais j'espérais avoir quelque chose qui couvrirait tout.


Si vous descendiez cette route (ne le faites pas; voir ma réponse), vous pouvez faire quelque chose comme chr (rereplace (arguments.entity, '\ d', '')) - Après avoir déterminé s'il était une entité décimale. Les entités hexagonales seraient similaires mais nécessiteraient de convertir l'hexadémie en décimal pour utiliser la fonction CHR.


(Oh, et il devrait y avoir un argument «tout» à la fin de l'appel Rereplace ci-dessus)


En fait, je ne serais pas surpris si cette approche s'échappait comme une manière plus rapide que XML-analysant un seul caractère avec chaque appel de fonction. +1 de moi.



28
votes

Réponse mise à jour:

Merci à Todd Sharp pour souligner un moyen très simple de le faire, en utilisant la bibliothèque Apache Commons StringScapePeutils, emballée avec CF (et Railo), vous permettant ainsi de faire: xxx


réponse originale:

Cette fonction liée est icky - il n'y a pas besoin de les nommer explicitement, et Comme vous le dites, il ne fait pas de numérics.

beaucoup plus simple est de laisser CF faire le travail pour vous - à l'aide de la fonction xmlparse fonction: xxx < / Pré>

Celui-ci fonctionne avec Railo, je ne me souviens pas si CF prend en charge cette syntaxe, afin que vous puissiez peut-être changer pour: xxx


4 commentaires

Pour une option plus légère, nous devrions en théorie être capable de plonger dans les classes Java utilisées pour implémenter XMLPARSE et de trouver la méthode de décodage / résolution de l'entité spécifique à utiliser - mais je viens de regarder à travers les apidocs et que je n'ai pas été capable. trouver quoi que ce soit.


C'est excellent et fonctionne bien, merci beaucoup! Pour vous amuser, j'ai creusé une solution Java à cela et j'ai constaté que les utilitaires d'échappement des chaînes Apache Commons contiennent une fonction unescapeaphtml . Docs ici: tinyurl.com/3n9pem qui pourrait faire la même chose avec moins de frais généraux, mais elle nécessite une installation nouvelle Classe Java sur le serveur, le redémarrage, etc. Je n'ai donc pas encore essayé. Pour l'instant, cela fonctionne parfaitement. Merci encore!


En fait, cf navires avec Apache Commons, vous pouvez donc simplement faire ce qui suit: # utils.unescapehtml (htmlençodedstring) #


Todd, vous devriez ajouter cela comme une réponse autonome.



0
votes

J'ai trouvé cette question tout en travaillant avec une méthode qui, par principe black-box, ne peut pas faire confiance qu'une chaîne entrante est codée par HTML codée ou que ce n'est pas.

J'ai adapté la fonction de Peter Boughton qu'il peut être utilisé en toute sécurité sur des cordes qui n'ont pas déjà été traitées avec des entités HTML. (La seule fois que cela semble être important, c'est quand des ampères lâches - c'est-à-dire des "chats et chiens" - sont présents dans la chaîne cible.) Cette version modifiée échouera également quelque peu gracieusement sur toute erreur de parse XML incidente. P>

<cffunction name="notifySomeoneWhoCares" access="private" returntype="void">
    <cfargument name="str" type="string" required="true"
        hint="String of unknown preprocessing" />
    <cfmail from="process@domain.com" to="someoneWhoCares@domain.com"
        subject="Comments from Web User" format="html">
        Some Web User Spoke Thus:<br />
        <cfoutput>#HTMLEditFormat(decodeHTMLEntity(arguments.str))#</cfoutput>
    </cfmail>
</cffunction>


0 commentaires

3
votes

Voici une autre fonction qui décodera toutes les entités de caractères HTML numériques dans une chaîne. Il ne repose pas sur XML analysant, il fonctionnera donc sur des chaînes contenant des étiquettes XML déséquilibrées. Ce n'est pas efficace si la chaîne a un grand nombre d'entités, mais c'est plutôt bien s'il n'y en a pas / peu. Je n'ai testé cela que sur Railo, pas AdObecf. XXX


0 commentaires