2012-02-02 8 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を使用している参照してください!つまり、innerHTMLはXHTMLでは動作しません。

+0

実際のユースケースを表示するために私の質問を編集しました。申し訳ありませんが、私は最初はもっとはっきりしませんでした。私にとっては、上のケースではスラッシュを書き留めても、私はまだINVALID_STATE_ERRを取得します。しかし、 'x asutherland

+0

@ user959986 '<'文字をエスケープするには、[できます](http://mothereff.in/js-escapes#0%3C)が必要です。 –

+0

ああ、私の悪い:/私はちょっとした騒ぎです。私は自分が使っているものを本当に気にしません。私が望むのは、後でvar scripts = doc.getElementsByTagName( 'script')を呼び出して、スクリプト[0] .innerHTMLを実行することによって 'somejs'を取得できるようにすることだけです。この作品を作る方法は?基本的には、可変テキストからタグのペアの間にあるすべてのjavascriptコードを取得したいだけです。 – asutherland

関連する問題