2012-02-02 3 views
0

기본적으로 HTML 태그가 포함될 수있는 텍스트가 있지만 HTML이 아닌 인코딩 된 문자가 포함될 수 있습니다.JavaScript에서 태그 자체를 인코딩하지 않고 html 태그가 포함 된 텍스트를 HTML로 인코딩하는 방법

var doc = window.document.implementation.createDocument 
    ('http://www.w3.org/1999/xhtml', 'html', null); 
var text = '<head><script>somejs</script>' + 
     '<script>var x = 7; var y = 5; var foo = x < y;</script>' + 
     '</head><body></body>'); 

텍스트를 요소 innerHTML 특성으로 설정하고 싶습니다. 때문에 x와 y 사이의보다 기호의 DOM 예외 11 : 난 그냥

doc.getElementsByTagName('html')[0].innerHTML = text; 

을 할 경우 이는 INVALID_STATE_ERR됩니다. 내가 변수 텍스트 대해 HTMLEncode 경우

그러나, 나는

&lt;head&gt;&lt;script&gt;somejs&lt;/script&gt;&lt;script&gt;var x = 7; var y = 5; var  foo = x &lt; y;&lt;/script&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt; 

을 얻을 그리하여 나는 그 innerHTML을 설정 한 후 원하는 요소가 행동에 필요한 모든 태그를 잃게됩니다. 태그 자체를 인코딩하지 않고 문자열의 모든 태그 내용을 htmlencode하는 표준 방법이 있습니까?

+0

결과를 얻기 위해'escape'와'unescape'을 사용하십시오. –

+0

아쉽게도 전체 문자열을 이스케이프 처리하므로 doc.getElementsByTagName ('script')와 같은 작업을 수행하려는 경우 스크립트 태그를 구성하는 < and >이 이스케이프 처리 되었기 때문에 아무 것도 얻을 수 없습니다. – asutherland

답변

0

인라인 스크립트의 경우 you need to escape the string </script when followed by a space character, >, or /, else it would close the respective opening tag.

</script> 대신 <\/script>을 사용할 수 있습니다. 이 작품 :

var text = '<head><script>somejs<\/script><script>var x = 7; var y = 5; var foo = x < y;<\/script></head><body></body>'; 
el.innerHTML = text; 

업데이트 : 지금 당신은 당신의 질문을 편집 한 것으로, 당신이 XHTML을 사용하고보세요! XHTML에서는 innerHTML이 작동하지 않습니다.

+0

실제 사용 사례를 보여주기 위해 제 질문을 수정했습니다. 처음에는 더 명확하지 않았습니다. 나를 위해, 위의 경우에 비록 내가 슬래시를 감추었을지라도 나는 아직도 INVALID_STATE_ERR을 얻는다. 그러나 'x asutherland

+0

@ user959986'<'문자를 이스케이프하고 싶다면 (http://mothereff.in/js-escapes#0%3C) [필요]하지 않아도됩니다. –

+0

아, 내 잘못 :/난 조금 멍청이야. 나는 내가 사용하는 것을 정말로 신경 쓰지 않는다. 내가 원하는 것은 나중에 var scripts = doc.getElementsByTagName ('script')를 호출 한 다음 스크립트 [0] .innerHTML;을 수행하여 'somejs'를 가져올 수 있어야한다는 것입니다. 이 일을 할 수있는 방법은 없나요? 기본적으로 나는 가변 텍스트에서 태그 쌍 사이의 모든 자바 스크립트 코드를 가져 오려고합니다. – asutherland

관련 문제