Javascript innerHTML和静默解码的引号
设置: 页面上隐藏的div中有一个格式良好的JSON对象 作为该对象的一部分,一些值是HTML,在该HTML中,双引号是HTML编码的,如:Javascript innerHTML和静默解码的引号,javascript,json,innerhtml,Javascript,Json,Innerhtml,设置: 页面上隐藏的div中有一个格式良好的JSON对象 作为该对象的一部分,一些值是HTML,在该HTML中,双引号是HTML编码的,如:“addationalinfo”:“如果需要更多帮助,请访问a href=”http://www.google.com“谷歌/a” 在本页的后面,我将尝试编写JS来读取这个对象,这样就可以完成其他很酷的事情 问题是: innerHTML似乎隐式地解码引号,这意味着JSON.parse()(和类似的jQuery选项)由于语法错误而失败。我无法替换()引号,因为
“addationalinfo”:“如果需要更多帮助,请访问a href=”http://www.google.com“谷歌/a”
在本页的后面,我将尝试编写JS来读取这个对象,这样就可以完成其他很酷的事情
问题是:
innerHTML似乎隐式地解码引号,这意味着JSON.parse()(和类似的jQuery选项)由于语法错误而失败。我无法替换()引号,因为它们以正确的JSONy方式到处都是
例如:
<span class="hiddenField" id="TheJSONObject">
{ "thing" : "thingvalue", "badthing" : "a <a href="http://www.google.com">link!</a>", "lastthing" : "lastthingvalue" }
</span>
<script>
var newobj = JSON.parse(document.getElementById("TheJSONObject").innerHTML.trim());
alert(newobj.thing);
问题是:
有没有什么方法可以获得实际的原始innerHTML,而不让JS像这样帮助我,让JSON.parse()工作?这是完全不可能的。您有一个
,而不是
或任何其他被视为文字的文本,因此“
和”
之间没有区别。首先,您需要对其进行正确编码;这可能意味着HTML编码JSON编码的对象,该对象包含HTML编码的值,输出为HTML
如果您无法修改该输出,那么最接近的方法可能是发出(XHR)请求,并在实体完整的情况下手动解析它。我不理解这个答案。问题不在于URL编码,而在于HTML编码;当我试图用innrHTML将它们放在一个盒子里时,它们就消失了。你能解释一下URI函数在这里有什么帮助吗?为什么(看起来)是唯一一个出现这种情况的实体?(并非我怀疑你的答案,我只是好奇你是否知道为什么与所有其他编码相比,它只是这种编码)@steegness:没有必要在引用的属性值之外转义引号,因此浏览器在重建
innerHTML
时不会转义引号。
console.log(document.getElementById("TheJSONObject").innerHTML)
{ "thing" : "thingvalue", "badthing" : "a <a href="http://www.google.com">link!</a>", "lastthing" : "lastthingvalue" }