2009-07-24 9 views
3

SerializeJSONは印刷不可能な文字(つまりASCII 21)を使用してJSONを作成します印刷可能でない文字をCF8でSerializeJSONを回避するには?

これは無効なJSONです。どうすればこれを回ることができますか?

印刷できない文字を削除する正規表現は機能しますか?

印刷可能でない文字を削除する正規表現はありますか?

+0

解決策をテストするスクリプトがありますか?または少なくともテストケースですか? IE:クエリをキーの1つとして含む構造体をシリアル化します。結果にASCIIコード21が表示されます。私はアイデアを持っていますが、そのテストケースを持つことは、投稿する前にそれが良い答えであることを確認するのに役立ちます。 :) –

答えて

4

この単純な解決策はcffeed用に作成されましたが、問題は非常に似ています。

まず、JavaライブラリStringEscapeUtils(Commons Lang API)を使用しようとしましたが、コンテンツを正しくエスケープしませんでした。 XMLにはお勧めです。

このcfcメソッドは私のために働きます。多分あなたを助けるでしょう。

<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> 
関連する問題