2016-05-24 5 views
-1

Что я хочу сделать, так это позволить пользователю вводить строку, а затем отображать эту строку на веб-странице внутри элемента div, но я не хочу, чтобы пользователь мог добавлять жирный тег или что-либо, что действительно могло бы сделать текст HTML полужирный. Как я могу это сделать, чтобы текст, введенный пользователем, не преобразовывался в HTML-код, если в тексте есть HTML-тег?Как я могу сделать код HTML незавершенным?

ответ

1

здесь аккуратный маленькая функция дезинфицировать ненадежного текст:

function sanitize(ht){ // tested in ff, ch, ie9+ 
    return new Option(ht).innerHTML; 
} 

пример ввода/вывода:

sanitize(" Hello <img src=data:image/png, onmouseover=alert(666) onerror=alert(666)> World"); 

// == " Hello &lt;img src=data:image/png, onmouseover=alert(666) onerror=alert(666)&gt; World" 

Он будет достичь тех же результатов, как настройка elm.textContent=str;, но как функция, yo u может использовать его проще inline, например, запускать уценку после того, как вы дезинфицируете(), чтобы вы могли вставлять довольно-взвешенный формат (например. связывание URL-адресов) без запуска произвольного HTML-кода от пользователя.

+0

Очень креативный, мне он нравится. Спасибо :) –

+0

Это один из лучших, потому что вы можете вставить его в любом месте html. Спасибо. –

2

Используйте createTextNode (значение) и добавьте его в свой элемент (стандартное решение) или innerText (нестандартное решение) вместо innerHTML.

Для решения JQuery рассмотрите ответ Дэна Вебера.

+0

Хорошо, я попробую это! Спасибо за ответ :) –

+0

Обратите внимание, что не все браузеры поддерживают innerText, используйте $ .text(), если это возможно. – dandavis

+0

Отмечено. Спасибо, дандавис! –

1

использовать .text() при настройке текста в div, а не в формате .HTML. Это будет выглядеть как текст вместо html.

$(document).ready(function() { 
 
    // Handler for .ready() called. 
 

 
    $("#change-it").click(function() { 
 
    var userLink = $('#usr-input').val().replace(/.*?:\/\//g, ""); 
 
    $('#users-text').text(userLink); 
 
    }); 
 

 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<input type="text" class="form-control" id="usr-input"> 
 
<br> 
 
<button id="change-it" type="button">Update Text</button> 
 
<br> 
 
<div id="users-text"></div>

1

Почему бы просто не использовать .text()?

$('#in').on('keyup', function(e) { 
 
    $('#out').text($(this).val()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input id="in"> 
 
<br> 
 
<div id="out"></div>