ColdFusion:无效的XML控件字符(十六进制)

前端之家收集整理的这篇文章主要介绍了ColdFusion:无效的XML控件字符(十六进制)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用< 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);

猜你在找的XML相关文章