• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CGIのtextareaへのタグの表示)

CGIのtextareaへのタグの表示

このQ&Aのポイント
  • CGI(Perl)でWebのメモ帳のようなプログラムを作っています。
  • 初回の記入をそのまま表示させる場合は問題ありませんが、一度記入した内容を編集のためにブラウザに再表示させ、更にそれを更新すると タグの <> と &lt; &gt;がどちらも <>に変換されてしまい、説明中の HTMLタグ文字列がタグになってしまいます。例えば、最初の記入時「&lt; a href・・・ &gt; はリンクタグ」などと記入してアップロードすると、再表示するとブラウザが「<a href・・・ >はリンクタグ」と表示します。
  • このような問題を解決するために、textarea 内でのタグ表示には特殊な文字列を使用する方法があります。例えば、「<<」を「&lt;」に変換して送信し、CGIが「<<」を受け取ったら「&lt;」に変換してログに記録するようなローカルな方法が考えられます。しかし、よりスマートな方法はまだ定石化されていないようです。

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

  • ベストアンサー
回答No.1

HTML::Entities の encode と decode 、もしくは CGI.pm の escapeHTML と unescapeHTML use HTML::Entities; use CGI qw(escapeHTML unescapeHTML); my $unescape = qq(<h2>"hoge"&' bar &lt;'</h2>); print "--- use HTML::Entities::encode ---\n"; my $escape1 = HTML::Entities::encode($unescape); print $escape1, "\n"; print HTML::Entities::decode($escape1), "\n"; print "\n"; print "--- use CGI escapeHTML ---\n"; my $escape2 = escapeHTML($unescape); print $escape2, "\n"; print unescapeHTML($escape2), "\n"; --- $ perl -w foo.pl --- use HTML::Entities::encode --- &lt;h2&gt;&quot;hoge&quot;&amp;' bar &amp;lt;'&lt;/h2&gt; <h2>"hoge"&' bar &lt;'</h2> --- use CGI escapeHTML --- &lt;h2&gt;&quot;hoge&quot;&amp;' bar &amp;lt;'&lt;/h2&gt; <h2>"hoge"&' bar &lt;'</h2>

creative_soso
質問者

お礼

アドバイスありがとうございます。 結局、セオリー通り・・・・と言うことだと思いますが、実はベースはすでにかなりの期間使い続けている中で、たまたま気付いたバグでした(あまりタグなどは記入しないし、その編集は更にやらない)。 で元ソースをあまり変えたくないということもあり、元に戻って考えたところ、最終的には 編集画面にログを出力するときだけ "&" を &amp;に変換して送出すれば &lt; が &amp;lt; などとなって textarea では元の入力通り &lt; と表示され "<" に変換されなくなることに気付きました。 $str =~ s/&/&amp;/g; の1行追加だけで済みましたので、この方法で逃げることにしました。