2009-07-24 8 views
3

SerializeJSON crée un JSON avec des caractères non imprimables (par exemple, ASCII 21)Comment faire pour contourner SerializeJSON dans CF8 encodage caractères non imprimables?

Ce JSON est invalide. Comment puis-je contourner cela.

Une regex supprimant les caractères non imprimables fonctionnerait-elle?

Quelle regex supprimerait les caractères non imprimables?

+0

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. :) –

Répondre

4

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> 
Questions connexes