• ベストアンサー

【JavaScript】実体参照符号化なしでそのまま出力したい

JavaScript初心者です。 document.write()でhtmlかき出しをする際、 そのまま出力されるのではなくある程度の実体参照符号化が行われているということがわかりました。 例えば、 ・document.write("<>&");   → &lt;&gt;&amp ・document.write("<br />"); → <br> ・document.write("</3>");  → <!--3--> といった具合に加工されているようです。(あくまでhtmlソースの話です) かゆいところに手が届くいい機能だとは思うのですが、「そのまんま」出力したい場合もたまにはあります。そういうメソッドはないのでしょうか。 PHPやPerlの場合は print でそのまま出力できるのでJavaScriptはどうなの?と思ってしまったわけです。 「無理」という回答でも結構です。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • LOHA
  • ベストアンサー率52% (203/388)
回答No.1

私もjavascript歴はそんなに長いわけではないので、間違ってたらすいません。はじめに断っておきます。 さて、本題ですが、テキストをプレーンで出力したいということでしょうか? DOMが使えるのならtextContentプロパティ、innerTextプロパティに書き込めばいいようです。 (参考:http://www.openspc2.org/reibun/JavaScript_technique/sample/06_DOM/006/index.html) あるいはjQueryのtext()を使えばブラウザを意識する必要がないので楽ですね。 javascriptの組み込みでは、確認した限りではdocumentオブジェクトにそのまま出力する関数はないですね。 どうしてもdocument.writeを使いたいのであれば、がんばって自力で変換するしかないかもしれません。 ちなみに、 >・document.write("<>&");   → &lt;&gt;&amp >・document.write("<br />"); → <br> >・document.write("</3>");  → <!--3--> >といった具合に加工されている というのは違う気がします。 <>&と<br />はちゃんとそのまま出力されてますし(Firebugで確認)、</3>はHTMLとして無意味なので無視されているだけだと思います(確証ありませんが)。 実体参照符号化はされておらず、結局HTMLとしてどう解釈されるかなだけかと思われます。 以上参考になったら幸いです。

ikataro
質問者

お礼

ありがとうございます。 とりあえずそういう関数はないとわかっただけですっきりしました。 ちなみに >・document.write("<>&");   → <>& >・document.write("<br />"); → <br> >・document.write("</3>");  → <!--3--> はfirefox3.5.2(Win-XP)にて、「Ctrl+A」 > 「選択した部分のソースを表示」で見たものです。

その他の回答 (2)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.3

> ちなみに、改めてPHPで print '</3>'; を実行してみましたが、 > 手打ちでhtmlを書くのと同様そのまま書き出しでした。 それはおかしいな。 Firefox 3.5.2で <>& <br /> </3> と書いただけのHTMLを表示し 選択した部分のソースを表示してみたら、こちらでは <html><head></head><body>&lt;&gt;&amp; <br> <!--3--> </body></html> と表示されたから。 それから、No.2の回答で言いたかったことは、 ブラウザのパーサーが </3> を <!--3--> と解釈している以上、 </3> と書くのと <!--3--> と書くのは全く同じことで、 そのまま書き出すということにこだわるのは できるできないではなくそもそも意味がないのではないかと言うこと。 (JavaScript出力でも、HTMLの手打ちでも、PHP出力でも、) </3> が必ず <!--3--> と解釈されるなら、 「</3>を出力する」と言う動作は「<!--3-->を出力する」という動作と等価なはずなんです。

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

document.writeは直接関係なくて ブラウザのHTMLパーサーがそう解釈しているようです。 なので、PHPやperlで書き出したとしても同じ結果だと思います。 -------------------------------------------------- <html> <head> <script> //Firefox3だと // &lt;&gt;&amp; // <br> // <!--3--> //というalertがでる。 window.onload = function(){ alert(document.getElementById("test").innerHTML); } </script> </head> <body> <div id="test"> <>& <br /> </3> </div> </body> </html>

ikataro
質問者

お礼

なるほど、JavaScriptの書き出したものは直接的な方法で見ることが出来ないのでもどかしいですね。そもそもJavaScriptには書き出しという概念がないのでしょうか… ちなみに、改めてPHPで print '</3>'; を実行してみましたが、手打ちでhtmlを書くのと同様そのまま書き出しでした。 ありがとうございました。

関連するQ&A