使用html实体对文本框执行jQuery val()

时间:2015-02-03 10:06:23

标签: jquery html encoding

我使用简单的js小提琴http://jsfiddle.net/um788f6q/

设置了我的问题
<input type="text" id="yo">
$("#yo").val('hell&#39;o')

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

由于

4 个答案:

答案 0 :(得分:7)

  

基本上我想知道是否有办法显示撇号而不是编码的字符串。

没什么理智的。

value属性以文本形式处理,而不是HTML。

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

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

......但不要。解决真正的问题。

  

我在服务器上编码了这样的值,以防止xss攻击

不要这样做。

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

当您不处理HTML时,不要使用HTML防御。这可能会让你感到脆弱。

编码数据以插入JavaScript的适当方法是使用JSON编码器。 (如果要将JSON放在HTML属性值中,则使用实体对生成的JSON进行编码;如果要将/个字符放在<script>元素中,则转义为{{1}}个字符。

答案 1 :(得分:-2)

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

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

答案 2 :(得分:-2)

试试这个

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

Fiddle Demo

答案 3 :(得分:-2)

这应该可以帮到你

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

JS Fiddle