ColdFusion:无效的XML控件字符(十六进制)
发布时间:2020-12-16 22:44:55 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 cfxml创建一个xml对象.我用 XMLFormat()格式化了所有数据. 在XML中有一些无效字符,如’?’.我将这个字符添加到xml doctype中,如下所示: !ENTITY raquo "?" HTML文本格式不是很好,但大多数都适用于我的代码.但在某些文本中有一些控制字符.我
我正在尝试使用< cfxml>创建一个xml对象.我用
XMLFormat()格式化了所有数据.
在XML中有一些无效字符,如’?’.我将这个字符添加到xml doctype中,如下所示: <!ENTITY raquo "?"> HTML文本格式不是很好,但大多数都适用于我的代码.但在某些文本中有一些控制字符.我收到以下错误: 在文档的元素内容中找到了无效的XML字符(Unicode:0x13). 我试图将unicode添加到doctype中,我尝试了这个solution.两者都不起作用…… 解决方法
这是有效的cfscript代码,用于清理我们的XML,有两种方法,一种清除较高的国际字符,另一种只清除破坏我们XML的较低ASCII字符,如果找到更多字符,只需展开过滤规则.
<cfscript> function cleanHighAscii(text){ var buffer = createObject("java","java.lang.StringBuffer").init(); var pattern = createObject("java","java.util.regex.Pattern").compile(javaCast( "string","[^x00-x7F]" )); var matcher = pattern.Matcher(javaCast( "string",text)); while(matcher.find()){ var value = matcher.group(); var asciiValue = asc(value); if ((asciiValue == 8220) OR (asciiValue == 8221)) value = """"; else if ((asciiValue == 8216) || (asciiValue == 8217)) value = "'"; else if (asciiValue == 8230) value = "..."; else value = "&###asciiValue#;"; matcher.AppendReplacement(buffer,javaCast( "string",value )); } matcher.AppendTail(buffer); return buffer.ToString(); } function removeSubAscii(text){ return rereplaceNoCase(text,"x1A","&###26#;","all"); } function XMLSafe(text){ text = cleanHighAscii(text); text = removeSubAscii(text); return text; } </cfscript> 其他posisbilty是用户CF10功能encodeForXML(): https://learn.adobe.com/wiki/display/coldfusionen/EncodeForXML 或者直接使用CF10附带的CFAPI,或者从OWASP网站https://www.owasp.org/index.php/ESAPI_Overview向您的旧CF添加ESAPI jar: var esapi = createObject("java","org.owasp.esapi.ESAPI"); var esapiEncoder = esapi.encoder(); return esapiEncoder.encodeForXML(text); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |