Невыход амперсанд символов в JavaScript



У меня возникли проблемы с корректным отображением значений, содержащих экранированные символы (т. е. апострофы хранятся как ', а не ', а скобки-это &gt; и &lt;, а не > и <).



Элементы, хранящиеся в моей базе данных, имеют символы (' < >), экранированные в (' &lt; &gt;) соответственно. Когда я пытаюсь динамически добавить их на страницу с JavaScript, они распечатываются в экранированном виде в Firefox, а не возвращаются к своим обычным значениям, как в IE (&lt; печатается к HTML скорее всего Просто <).



<html>
<head>
<script type="text/javascript">
$(document).ready(function() {
var str = "&gt;";
$(document.body).html(str);
});
</script>
</head>
<body>

</body>
</html>


Я знаю, что если я просто сделаю замену, я смогу печатать правильно, но, делая это, я позволяю вводить HTML-код, поэтому я в первую очередь экранировал строку.



Добавлено:



Во-первых, я прошу прощения за ошибки в моем первоначальном посте. После более детального изучения, в тех случаях, когда я использую $().html (), строки печатаются правильно. Время, когда они не печатают правильно, когда я использую код как внизу.

var str = "&gt;";
$('#inputField').val(str);


В данном случае вместо ">" показан текст ">". Есть ли что-то, что я могу сделать, чтобы исправить это?

621   3  

3 ответов:

Вам нужно расшифровать их следующим образом:

$('#myText').val($("<div/>").html(str).text());

Демо: http://jsfiddle.net/QUbmK/

Вы можете переместить часть декодирования в функцию и вызвать ее вместо этого:

function jDecode(str) {
    return $("<div/>").html(str).text();
}

$('#myText').val(jDecode(str));

Во-первых, вы не можете выполнить код, приведенный в вашем примере. документ.тело не готово к манипуляциям в голове тега. Вы должны запустить его после загрузки документа. Если я помещу ваш код в безопасное место для запуска, он прекрасно работает, как вы можете видеть здесь.

Итак ... в вашей ситуации должно быть нечто большее, чем простой пример, который вы показываете здесь. Вы можете видеть, что ваш простой пример прекрасно работает здесь, когда код помещен в нужное место. место:

Http://jsfiddle.net/jfriend00/RDSNz/

Этого не происходит, по крайней мере, с jQuery. Если вы это сделаете, буквально: $(document.body).html('&lt;div&gt;'), вы получите <div> напечатанный на экране, а не тег div. Если вы делаете что-то, не указанное в вашем вопросе:

Либо используйте .text() вместо .html() , либо замените все & на &amp;:

$(document.body).text(str);
$(document.body).html(str.replace(/&/g, '&amp;'))

Comments

    Ничего не найдено.