gpt4 book ai didi

javascript XMLSerializer 属性中的特殊字符

转载 作者:数据小太阳 更新时间:2023-10-29 02:45:46 24 4
gpt4 key购买 nike

我在将 TAB、换行和回车等特殊字符序列化为属性值时遇到了问题。

根据这个http://www.w3.org/TR/1999/WD-xml-c14n-19991109.html#charescaping , 这些应该被编码为 &\#x9; , &\#xA; , 和 &\#xD;分别。但是在 chrome 中调用:

var root = new DOMParser().parseFromString('<root></root>', 'text/xml').documentElement;
root.setAttribute('a', 'first\nsecond');
var serialized = new XMLSerializer().serializeToString(root);

给出一个字符串 < root a="first\nsecond"/>换行符未转义。

再次加载时:

var loaded = new DOMParser().parseFromString(serialized, 'text/xml').documentElement;
loaded.getAttribute('a');

返回“第一秒”,换行符只剩下一个空格。有没有人遇到过这个问题?任何帮助将不胜感激。

谢谢,

维克多

最佳答案

我遇到了这个问题,并通过编写函数 removeInvalidCharacters(xmlNode) 解决了这个问题,该函数删除了 XML 树中的无效字符(来自 nodeValues)。您可以在序列化之前使用它来确保您不会得到无效字符。

You can find removeInvalidCharacters() in my stackoverflow question on the same topic

您可以像这样使用 removeInvalidCharacters():

var stringWithSTX = "Bad" + String.fromCharCode(2) + "News";
var xmlNode = $("<myelem/>").attr("badattr", stringWithSTX);

var serializer = new XMLSerializer();
var invalidXML = serializer.serializeToString(xmlNode);

// Now cleanse it:
removeInvalidCharacters(xmlNode);
var validXML = serializer.serializeToString(xmlNode);

我还提交了一份针对 chrome 的问题报告,但值得注意的是 IE9 在这方面有其自身的错误,因此没有解决方法的修复可能需要很长时间。

关于javascript XMLSerializer 属性中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14504226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com