2010-04-16 2 views
3

Я создаю поисковую систему исходного кода, и я возвращаю результаты на HTML-странице (точнее, aspx, но логика представления находится в HTML).Показаны строки комментариев HTML (<!-- -->) в файлах HTML

Когда кто-то ищет строку, я также возвращаю всю строку кода, где эта строка может быть найдена в файле. Однако некоторые строки кода поступают из файлов HTML/aspx, и эти строки содержат специальные комментарии HTML().

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

Любая помощь будет приветствоваться. Благодарю.

+0

Похоже, вы ответили там свой вопрос. Просто выйдите из правого и левого разделителей. – Kazar

ответ

2

В любое время вы выводите текст в HTML-страницы, вы должны HTML-кодирование он. Если вы этого не сделаете, комментарии не исчезнут (и другие разметные строки), но у вас также будут большие сквозные дыры в области межсайтового скриптинга, так как потенциально ненадежные стороны смогут вставить <script> в ваш контекст безопасности ,

(ASPX быть точным

В .NET метод HTML-кодирование называется, естественно, HTMLEncode. Вы можете также использовать веб-управления, который HTML-кодирует автоматически для вас, например, Literal с literalmode encode.

но вид логика в HTML)

Не уверен, что вы имеете в виду, что, но если вы используете innerHTML установить содержание из сценария, вам нужно написать свой собственный HTML-кодер, так как есть не один встроенный в JS:

// HTML-encode a string for use in text content or an attribute value delimited by 
// double-quotes 
// 
function HTMLEncode(s) { 
    return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;'); 
} 

или, возможно, лучше использовать методы и свойства DOM для установки динамического содержимого, а не для использования HTML-строк. (Для настройки текстового содержимого используйте element.textContent=, отступая к element.innerText для IE, который не поддерживает его.)

+0

Спасибо, отличный ответ. Мне нужно только сейчас использовать HttpUtility.HTMLEnconde. Я не делаю никаких вычислений на стороне клиента, все делается на сервере. Так что пока я не буду использовать какие-либо javascript-методы. – Andrei

6

Как и любые другие специальные символы HTML для скрытых объектов. В частности < к &lt;

-1

Вы можете использовать XML CDATA для этого:

<![CDATA[ 
    some text with <!-- comments --> 
]]>; 
+0

Теоретически вы можете, но ни один браузер не поддерживает его в режиме text/html. – Quentin

+0

Также он не защищен для общего случая даже в режиме 'application/xhtml + xml', так как текст может содержать последовательность']]> '. – bobince

Смежные вопросы