Есть ли способ в JavaScript или MooTools для получения фактического текста в значении из элемента ввода без браузера, интерпретирующего любые специальные html-адреса? См. Пример, приведенный ниже. Мой желаемый результат:Как получить значение ввода без браузера, интерпретирующего специальные объекты html?
<div id="output">
<p>Your text is: <b>[<script>alert('scrubbed');</script>]</b></p>
</div>
Обратите внимание, что это работает, если я типа/копировать <script>alert('scrubbed');</script>
непосредственно в поле ввода текста, но терпит неудачу, если я вставляю сразу после загрузки страницы.
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>scrubtest</title>
</head>
<body id="scrubtest" onload="">
<script type="text/javascript" language="JavaScript" src="/js/mootools-core.js"></script>
<input type="text" name="scrubtext" value="<script>alert('scrubbed');</script>" id="scrubtext"/><br />
<input type="button" value="Insert" onclick="insertText();"/><br />
<input type="button" value="Get via MooTools" onclick="alert($('scrubtext').get('value'));"/><br />
<input type="button" value="Get via JavaScript" onclick="alert(document.getElementById('scrubtext').value);"/><br />
<div id="output">
</div>
<script type="text/javascript" charset="utf-8">
function insertText()
{
var stext = $('scrubtext').get('value');
var result = new Element('p', {html: "Your text is: <b>["+stext+"]</b>"});
result.inject($('output'));
}
</script>
</body>
</html>
В то время как это действительно работает, мне не кажется, что мне нужно «дезинфицировать» текст, который уже был подвергнут санации один раз. Значение ввода является результатом проверки на стороне сервера (php): $ destination ['transit_time'] = trim (htmlspecialchars (stripslashes ($ destination ['transit_time']), ENT_QUOTES)); Я просто хочу, чтобы он остался дезинфицированным, когда я перемещаю его по документу. – CaptainQwyx
Вы не дезинфицируете его. Вы - HTML, избегающий его. '&' должен быть экранирован для отображения в HTML (браузеры [иногда] прощают и отображают его, даже если вы не кодируете HTML). Это правило. Следуйте за ним. –
Но это именно то, что вы хотите. Когда вы пишете (simpified) '', тогда значение входа ** будет ** '<'. Это вы хотите, чтобы значение было '<', тогда вам нужно сбежать от него до '& lt;'. Это просто, как работает, и в этом нет ничего плохого. – RoToRa