Eh bien, cette solution simple a été créée pour cffeed, mais votre problème est très similaire.
D'abord j'ai essayé d'utiliser la bibliothèque Java StringEscapeUtils (Commons Lang API), mais elle n'a pas échappé à mon contenu correctement. Bien qu'il soit recommandé pour XML. Donc, cette méthode cfc fonctionne pour moi. Peut-être vous aidera aussi.
<cffunction name="cleanXmlString" access="public" returntype="any" output="false" hint="Replace non-valid XML characters">
<cfargument name="dirty" type="string" required="true" hint="Input string">
<cfset var cleaned = "" />
<cfset var patterns = "" />
<cfset var replaces = "" />
<cfset patterns = chr(8216) & "," & chr(8217) & "," & chr(8220) & "," & chr(8221) & "," & chr(8212) & "," & chr(8213) & "," & chr(8230) />
<cfset patterns = patterns & "," & chr(1) & "," & chr(2) & "," & chr(3) & "," & chr(4) & "," & chr(5) & "," & chr(6) & "," & chr(7) & "," & chr(8) />
<cfset patterns = patterns & "," & chr(14) & "," & chr(15) & "," & chr(16) & "," & chr(17) & "," & chr(18) & "," & chr(19) />
<cfset patterns = patterns & "," & chr(20) & "," & chr(21) & "," & chr(22) & "," & chr(23) & "," & chr(24) & "," & chr(25) />
<cfset patterns = patterns & "," & chr(26) & "," & chr(27) & "," & chr(28) & "," & chr(29) & "," & chr(30) & "," & chr(31) />
<cfset replaces = replaces & "',',"","",--,--,..." />
<cfset replaces = replaces & ",-, , , , , , , " />
<cfset replaces = replaces & ", , , , , , " />
<cfset replaces = replaces & ", , , , , , " />
<cfset replaces = replaces & ", , , , , , " />
<cfset cleaned = ReplaceList(arguments.dirty, patterns, replaces) />
<cfreturn cleaned />
</cffunction>
Avez-vous un script qui va tester une solution? Ou au moins un cas de test? IE: Sérialiser une structure qui contient une requête comme l'une de ses clés, et vous verrez le code ASCII 21 dans le résultat. J'ai une idée mais avoir ce cas-test aiderait vraiment à s'assurer que c'est une bonne réponse avant de la poster. :) –