对具有 html 个实体的文本框执行 jQuery val()

Performing jQuery val() against a textbox with html entities

我已经使用简单的 js 设置了我的问题 fiddle http://jsfiddle.net/um788f6q/

<input type="text" id="yo">
$("#yo").val('hell&#39;o')

基本上我想知道是否有办法显示撇号而不是编码字符串。我在服务器上对这样的值进行了编码以防止 xss 攻击,因此解码实际上不是一个有效的选项。

谢谢

您可以替换$#39; by ' 在 JS 中并在服务器端将其替换回。

<input type="text" id="yo">
$("#yo").val('hell&#39;o'.replace('&#39;',"'"))

Basically I would like to know if there is a way to display an apostrophe rather than the encoded string.

不正常。

值 属性 以文本形式交易,而不是 HTML。

作为一个可怕的 hack,您可以通过解析 HTML 然后读取生成的文本节点将其转换为文本。

$("#yo").val($("<div />").html('hell&#39;o').text());

……但是不要。解决真正的问题。

I have encoded the values like this on the server to prevent xss attacks

不要那样做。

您正在将数据插入 JavaScript,而不是 HTML。

当你不交易 HTML 时,不要为 HTML 使用防御。它可能会让你变得脆弱。

对插入 JavaScript 的数据进行编码的适当方法是使用 JSON 编码器。 (如果将 JSON 放在 HTML 属性值中,则使用实体对结果 JSON 进行编码,或者如果将 / 字符放在 <script>元素)。

试试这个

var test = 'hell&#39;o';
var decoded = $('<div/>').html(test).text();
$("#yo").val(decoded);

Fiddle Demo

这应该对你有帮助

var tp = 'hell&#39;o';
var new_tp = $('<textarea />').html(tp).text();
$('#yo').val(new_tp); 

JS Fiddle