为什么html属性返回为';HTMLDECODE';即使编码在html源代码中?

为什么html属性返回为';HTMLDECODE';即使编码在html源代码中?,html,dom,html-encode,Html,Dom,Html Encode,我使用html属性title设置如下提示: <a href... title="Go to next chapter">Go</a> <div style="position:absolute..."><script>alert(10)</script></div> 然后jquery插件遍历所有的[title]属性并生成漂亮的工具提示。非常简单,为上面的链接创建了一个新的div <div style="pos

我使用html属性title设置如下提示:

 <a href... title="Go to next chapter">Go</a>
<div style="position:absolute..."><script>alert(10)</script></div>

然后jquery插件遍历所有的[title]属性并生成漂亮的工具提示。非常简单,为上面的链接创建了一个新的div

<div style="position:absolute...">Go to next chapter</div>
转到下一章
问题是,标题可以由用户编辑,所以他可以写任何他想要的东西。我最初认为html编码很好,但结果证明我错了。 如果我有

<a id="a" title="&lt;script&gt;alert(10);&lt;/script&gt">Go</a>
Go
然后工具提示div如下所示:

 <a href... title="Go to next chapter">Go</a>
<div style="position:absolute..."><script>alert(10)</script></div>
警报(10)
1) 为什么浏览器在查询标题属性的值时对其进行解码

2) 我该怎么解决呢?(我知道有一种解决方案是双重html编码,但它太满了)

如何测试它:考虑这个代码

<html>  
 <body>  
  <!-- encoding once, this doesn't work -->
  <a id="a" title="&lt;script&gt;alert(10);&lt;/script&gt">atitle</a>  
  <!-- encoding twice, this works -->
  <a id="b" title="&amp;lt;script&amp;gt;alert(10);&amp;lt;/script&amp;gt">btitle</a>  

  <script>  
   function w(x){ document.write(x.attributes["title"].value);}  
   w(a);  // shows alert
   w(b);  // outputs it correctly into the page
  </script>  
 </body>  
</html>

阿蒂特尔
标题
函数w(x){document.write(x.attributes[“title”].value);}
w(a);//显示警惕
w(b);//将其正确输出到页面中
1)属性值就是解码后的值——如果你仔细想想,这是唯一有意义的方法。如果将javascript值设置为“\n”,然后向其发出警报,是否要返回“\n”或真正的换行符?标题属性是文本。。。您只是碰巧需要对其进行HTML编码才能编写它

2) 您可以对其进行双重编码,也可以使用文本节点:

var node = document.createTextNode(x.attributes['title'].value);
document.appendChild(node);
这是首选方法,然后爬行器/非javascript浏览器将看到正确的title属性