diff --git a/js/Global/encodeXml.js b/js/Global/encodeXml.js new file mode 100644 index 00000000..858013bb --- /dev/null +++ b/js/Global/encodeXml.js @@ -0,0 +1,46 @@ +var encodeXml = function(str, buffer) { + str = String(str); + + if (str === null || !str.length) return str; + if (!buffer) buffer = []; + + for (var i = 0, len = str.length; i < len; i += 1) { + var char = str.charAt(i); + + switch (char) { + case '<': + buffer.push('<'); + break; + + case '>': + buffer.push('>'); + break; + + case '&': + buffer.push('&'); + break; + + case '"': + buffer.push('"'); + break; + + case '\'': + buffer.push('''); + break; + + default: + var charCode = str.charCodeAt(i); + if (charCode < 0x20) { + // sort out invalid XML characters below 0x20 - all but 0x9, 0xA and 0xD. + // The trick is an adaption of java.lang.Character.isSpace(). + if (((((1 << 0x9) | (1 << 0xA) | (1 << 0xD)) >> charCode) & 1) !== 0) { + buffer.push(char); + } + } else { + buffer.push(char); + } + } + } + + return buffer.join(''); +} diff --git a/src/helma/scripting/rhino/GlobalObject.java b/src/helma/scripting/rhino/GlobalObject.java index 191cd7e8..1fa0f3fb 100644 --- a/src/helma/scripting/rhino/GlobalObject.java +++ b/src/helma/scripting/rhino/GlobalObject.java @@ -69,7 +69,7 @@ public class GlobalObject extends ImporterTopLevel implements PropertyRecorder { String[] globalFuncs = { "renderSkin", "renderSkinAsString", "getProperty", "authenticate", "createSkin", "format", - "encodeXml", "encodeForm", "formatParagraphs", + "encodeForm", "formatParagraphs", "getXmlDocument", "getHtmlDocument", "seal", "getDBConnection", "getURL", "write", "writeln", "serialize", "deserialize", "defineLibraryScope", @@ -453,17 +453,6 @@ public class GlobalObject extends ImporterTopLevel implements PropertyRecorder { return new NativeJavaObject(this, obj, null); } - /** - * - * - * @param obj ... - * - * @return ... - */ - public String encodeXml(Object obj) { - return HtmlEncoder.encodeXml(toString(obj)); - } - /** * *