我正在使用jQuery ajax调用来设置textarea的值。
如果我使用php的htmlentities()然后使用jquerys $(textarea).val()它不会显示字符而是显示实体。
没有htmlentities()一切都很好。使用val()时没有XSS,但如果在没有jquery的情况下访问脚本,则当然容易受到攻击。
会发生什么?
.load()有效,但我无法使用它。在我使用BBcode函数后,load()就会中断(DOM不会更新textarea,在Firebug中看起来应该是这样)
使用val()之后,html()会中断。
为什么?
Jquery代码:
$.ajax({
type: 'GET',
encoding:"UTF-8",
dataType:"html",
contentType: "text/plain;
charset=UTF-8",
url: "/quote.php?id=1",
context: document.body
}).done(function(data) { $('textarea').val(data); });
PHP代码:
htmlentities($nonEncodedRawText, ENT_QUOTES, 'UTF-8')
文本框中的结果:
</textarea><script type="text/javascript">
直接访问的结果:
</textarea><script type="text/javascript">
答案 0 :(得分:0)
您是否尝试过htmlspecialchars()而不是htmlentities?
这是另一个有类似问题的页面:Escaping output safely for both html and input fields
答案 1 :(得分:0)
现在,看起来没有简单的方法来显示&gt; &LT;使用val()或value =。
.html()可以工作,但只要.val()或值=被调用.html()就会中断。
我能找到的唯一解决方案是用以下内容替换整个textarea:
$('textarea').replaceWith('<textarea>'+data+'</textarea>')
重写bbcode函数也不会起作用,因为.html()。length似乎与.val()。length不同。而.val()。长度计数&gt;作为其实体&amp; g t; .html()。长度仅计数&gt;这会导致错误的标签展示位置等。