Jquery逃脱“<” “>”

时间:2014-05-06 17:49:17

标签: javascript jquery

我有一个textarea。在其点击事件。我将它插入数据库,然后将其显示为元素列表中的第一个元素。问题是。如果我在textarea中输入"<afasd>",则jquery无法正确显示它。它显示为空。 守则

var note = $.trim( $('#rep_notes_add_notes').val());
    if(note == "")
    return false;
    $.ajax({
                url: 'include/tre.ajax.php',
                type: 'POST',
                data: {
                    action: 'insert',
                    note: note
                    },
                dataType: 'json',
                success: function(data) {
                    jQuery("#rep_notes_add_notes").val('');
                    jQuery(".no_notes").remove();
                    *$(".notes:eq(0)").before('<div class="notes">'+note+'<div class="note-added"> Added by  '+user +'<span> on </span>'+data.update_time+'</div></div>');*
                }
            });

标记为*的行找到notes div,然后在其前插入一个元素以显示新输入的文本。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

它不会显示它,因为它认为<afasd>是标记,而不是文本。您需要将<更改为&lt;才能显示。

var str = "<afasd>";
var escaped = str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");

答案 1 :(得分:3)

不要将任意数据连接成HTML。您正在打开自己的注射问题,以及您看到的无效HTML问题。这一行:

$(".notes:eq(0)").before('<div class="notes">'+note+'<div class="note-added"> Added by  '+user +'<span> on </span>'+data.update_time+'</div></div>');

应该成为这样的事情(未经测试,未完成,但你明白了):

$('.notes:eq(0)').before(
    $('<div>').addClass('notes').text('Added by ' + user)
);

关键是,如果要设置文本而不是HTML,请使用.text()