如何解决SerializeJSON在CF8编码不可打印字符? [英] How to get around SerializeJSON in CF8 encoding non printable characters?

查看:95
本文介绍了如何解决SerializeJSON在CF8编码不可打印字符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

SerializeJSON使用不可打印的字符(即ASCII 21)创建JSON



这是无效的JSON。



正则表达式是什么?如何使用正则表达式?删除不可打印的字符?

解决方案

这个简单的解决方案是为cffeed创建的,但是你的问题非常相似。 >

首先,我试图使用Java库StringEscapeUtils(Commons Lang API),但它没有正确转义我的内容。虽然建议使用XML。



所以,这个cfc方法适用于我。

 < cffunction name =cleanXmlStringaccess =publicreturntype =anyoutput = falsehint =替换无效的XML字符> 
< cfargument name =dirtytype =stringrequired =truehint =输入字符串>
< cfset var cleans =/>
< cfset var patterns =/>
< cfset var replaceaces =/>

< 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 replaceaces = replaceaces& ',',,, - , - ,.../>
< cfset replaceaces = replaceaces& , - ,,,,,,/>
< cfset replaceaces = replaceaces& ,,,,,,/>
< cfset replaceaces = replaceaces& ,,,,,,/>
< cfset replaceaces = replaceaces& ,,,,,,/>

< cfset washed = ReplaceList(arguments.dirty,patterns,replaceaces)/>

< cfreturn washed />

< / cffunction>


SerializeJSON creates JSON with non printable characters (i.e. ASCII 21)

This is invalid JSON. How can I get round this.

Would a regex removing the non printable characters work?

What regex would remove non printable characters?

解决方案

Well, this simple solution was created for cffeed, but your problem is very similar.

First I've tried to use Java library StringEscapeUtils (Commons Lang API), but it didn't escaped my contents properly. Though it is recommended for XML.

So, this cfc method works for me. Maybe will help you too.

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

这篇关于如何解决SerializeJSON在CF8编码不可打印字符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆