Невыход амперсанд символов в JavaScript
У меня возникли проблемы с корректным отображением значений, содержащих экранированные символы (т. е. апострофы хранятся как ', а не ', а скобки-это > и <, а не > и <).
Элементы, хранящиеся в моей базе данных, имеют символы (' < >), экранированные в (' < >) соответственно. Когда я пытаюсь динамически добавить их на страницу с JavaScript, они распечатываются в экранированном виде в Firefox, а не возвращаются к своим обычным значениям, как в IE (< печатается к HTML скорее всего Просто <).
<html>
<head>
<script type="text/javascript">
$(document).ready(function() {
var str = ">";
$(document.body).html(str);
});
</script>
</head>
<body>
</body>
</html>
Я знаю, что если я просто сделаю замену, я смогу печатать правильно, но, делая это, я позволяю вводить HTML-код, поэтому я в первую очередь экранировал строку.
Добавлено:
Во-первых, я прошу прощения за ошибки в моем первоначальном посте. После более детального изучения, в тех случаях, когда я использую $().html (), строки печатаются правильно. Время, когда они не печатают правильно, когда я использую код как внизу.
var str = ">";
$('#inputField').val(str);
В данном случае вместо ">" показан текст ">". Есть ли что-то, что я могу сделать, чтобы исправить это?
3 ответов:
Вам нужно расшифровать их следующим образом:
$('#myText').val($("<div/>").html(str).text());Демо: http://jsfiddle.net/QUbmK/
Вы можете переместить часть декодирования в функцию и вызвать ее вместо этого:
function jDecode(str) { return $("<div/>").html(str).text(); } $('#myText').val(jDecode(str));
Во-первых, вы не можете выполнить код, приведенный в вашем примере. документ.тело не готово к манипуляциям в голове тега. Вы должны запустить его после загрузки документа. Если я помещу ваш код в безопасное место для запуска, он прекрасно работает, как вы можете видеть здесь.
Итак ... в вашей ситуации должно быть нечто большее, чем простой пример, который вы показываете здесь. Вы можете видеть, что ваш простой пример прекрасно работает здесь, когда код помещен в нужное место. место:
Этого не происходит, по крайней мере, с jQuery. Если вы это сделаете, буквально:
$(document.body).html('<div>'), вы получите<div>напечатанный на экране, а не тегdiv. Если вы делаете что-то, не указанное в вашем вопросе:Либо используйте
.text()вместо.html(), либо замените все&на&:$(document.body).text(str); $(document.body).html(str.replace(/&/g, '&'))
Comments