diff --git a/src/core.js b/src/core.js index 2d45ded0..2cec93b8 100644 --- a/src/core.js +++ b/src/core.js @@ -534,8 +534,6 @@ Strophe = { text = text.replace(/\&/g, "&"); text = text.replace(//g, ">"); - text = text.replace(/'/g, "'"); - text = text.replace(/"/g, """); return text; }, @@ -948,12 +946,16 @@ Strophe = { result = "<" + nodeName; for (i = 0; i < elem.attributes.length; i++) { if(elem.attributes[i].nodeName != "_realname") { - result += " " + elem.attributes[i].nodeName.toLowerCase() + - "='" + elem.attributes[i].value - .replace(/&/g, "&") - .replace(/\'/g, "'") - .replace(/>/g, ">") - .replace(//g, ">"); + if (escaped.indexOf('"') > -1) { + result += "'" + escaped.replace(/\'/g, "'") + "'"; + } else { + result += '"' + escaped.replace(/\"/g, """) + '"'; + } } } diff --git a/tests/tests.js b/tests/tests.js index c6730f55..ab92d641 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -97,12 +97,12 @@ $(document).ready(function () { test("Builder with XML attribute escaping test", function () { var text = ""; - var expected = ""; + var expected = ''; var pres = $pres({to: text}); equal(pres.toString(), expected, "< should be escaped"); text = "foo&bar"; - expected = ""; + expected = ''; pres = $pres({to: text}); equal(pres.toString(), expected, "& should be escaped"); }); @@ -110,7 +110,7 @@ $(document).ready(function () { test("c() accepts text and passes it to xmlElement", function () { var pres = $pres({from: "darcy@pemberley.lit", to: "books@chat.pemberley.lit"}) .c("nick", {xmlns: "http://jabber.org/protocol/nick"}, "Darcy"); - var expected = "Darcy"; + var expected = 'Darcy'; equal(pres.toString(), expected, "'Darcy' should be a child of "); }); @@ -125,7 +125,7 @@ $(document).ready(function () { equal(Strophe.getText(textNode0), "s < & > p", "should be escaped"); var text1 = "s's or \"p\""; var textNode1 = Strophe.xmlTextNode(text1); - equal(Strophe.getText(textNode1), "s's or "p"", "should be escaped"); + equal(Strophe.getText(textNode1), "s's or \"p\"", "should be unchanged"); var text2 = "]]>"; var textNode2 = Strophe.xmlTextNode(text2); equal(Strophe.getText(textNode2), "<![CDATA[<foo>]]>", "should be escaped"); @@ -152,15 +152,15 @@ $(document).ready(function () { var parser = new DOMParser(); // Attributes var element1 = parser.parseFromString("bar","text/xml").documentElement; - equal(Strophe.serialize(element1), "bar", "should be serialized"); + equal(Strophe.serialize(element1), 'bar', "should be serialized"); var element2 = parser.parseFromString("bar","text/xml").documentElement; - equal(Strophe.serialize(element2), "bar", "should be serialized"); + equal(Strophe.serialize(element2), 'bar', "should be serialized"); // Escaping values var element3 = parser.parseFromString("a > 'b' & "b" < c","text/xml").documentElement; - equal(Strophe.serialize(element3), "a > 'b' & "b" < c", "should be serialized"); + equal(Strophe.serialize(element3), "a > 'b' & \"b\" < c", "should be serialized"); // Escaping attributes var element4 = parser.parseFromString("bar","text/xml").documentElement; - equal(Strophe.serialize(element4), "bar", "should be serialized"); + equal(Strophe.serialize(element4), "bar", "should be serialized"); var element5 = parser.parseFromString(" "b"\">bar","text/xml").documentElement; equal(Strophe.serialize(element5), "bar", "should be serialized"); // Empty elements