对包含html实体的文本框执行jQuery瓦尔()

wxclj1h5  于 2023-03-01  发布在  jQuery
关注(0)|答案(5)|浏览(127)

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

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

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

moiiocjp

moiiocjp1#

基本上,我想知道是否有一种方法可以显示撇号而不是编码字符串。
没有理智。
value属性处理文本,而不是HTML。
作为一个可怕的黑客,您可以通过解析HTML然后读取生成的文本节点来将其转换为文本。

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

......但不要这样做。而是解决真正的问题。
我在服务器上对这些值进行了如下编码,以防止xss攻击
别这样。
您要将数据插入JavaScript,而不是HTML。
当你不处理HTML时,不要为HTML辩护,这会让你很容易受到攻击。
对要插入JavaScript的数据进行编码的适当方法是使用JSON编码器(如果要将JSON放入HTML属性值中,则使用实体对生成的JSON进行编码;如果要将其放入<script>元素中,则对任何/字符进行转义)。

kzmpq1sx

kzmpq1sx2#

试试这个

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

Fiddle Demo

6mw9ycah

6mw9ycah3#

不是用.val()/.text().html()检索字段或元素的值,而是要对其进行编码。
你可以使用serialize(),并发送它在一个数据ajaxer很容易...
并检索带值字段名(任意几个字符)或整个html表单;)
示例:

var text = $("input#my_input").val('Good Music &#x1F3B6;');
console.log(text);
            
var text = $("input#my_input").serialize();
console.log(text);

返回者:好音乐🎶

mnemlml8

mnemlml84#

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

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

k5ifujac5#

这个应该对你有帮助

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

JS Fiddle

相关问题