CGI(Perl)でWebのメモ帳のようなプログラムを作っています。
何種類かのHTMLタグの使用もできるようにしてあり、更に タグ説明のために
< > などを記入することもあります。
初回の記入をそのまま表示させる場合は問題ありませんが、一度記入した内容を
編集のためにブラウザに再表示させ、更にそれを更新すると タグの <> と < >が
どちらも <>に変換されてしまい、説明中の HTMLタグ文字列がタグになってしまいます。
例えば
A: 最初の記入時「< a href・・・ > はリンクタグ」などと記入してアップロード
B: サーバーログには「< a href・・・ > はリンクタグ」のまま記録される
C: 編集のためにその記事を再表示させるとブラウザが「<a href・・・ >はリンクタグ」 と表示する
D: 別の部分を編集後再アップロードするとログには <a href・・・ > がタグとして記録される
E: 以降の表示では <a href・・・ > の部分がリンクタグとして扱われ「はリンクタグ」にリンクがかかる
というような問題に悩んでいます。
textarea 内では <code>タグも使えなさそうで・・・
思案の末、 textarea への送信時だけ 「 < 」を 「<<」などとして送信し、CGIが「<<」を受け取ったら
< に変換してログ記録する などのローカルな方法を考えましたが、あまりスマートではないかと。
定石のような方法はないのでしょうか?
No.1ベストアンサー
- 回答日時:
HTML::Entities の encode と decode 、もしくは CGI.pm の escapeHTML と unescapeHTML
use HTML::Entities;
use CGI qw(escapeHTML unescapeHTML);
my $unescape = qq(<h2>"hoge"&' bar <'</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 ---
<h2>"hoge"&' bar &lt;'</h2>
<h2>"hoge"&' bar <'</h2>
--- use CGI escapeHTML ---
<h2>"hoge"&' bar &lt;'</h2>
<h2>"hoge"&' bar <'</h2>
アドバイスありがとうございます。
結局、セオリー通り・・・・と言うことだと思いますが、実はベースはすでにかなりの期間使い続けている中で、たまたま気付いたバグでした(あまりタグなどは記入しないし、その編集は更にやらない)。
で元ソースをあまり変えたくないということもあり、元に戻って考えたところ、最終的には 編集画面にログを出力するときだけ "&" を &に変換して送出すれば < が &lt; などとなって textarea では元の入力通り < と表示され "<" に変換されなくなることに気付きました。
$str =~ s/&/&/g;
の1行追加だけで済みましたので、この方法で逃げることにしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- その他(IT・Webサービス) リンクできない HTMLで<a>タグでリンクを作ったのですがブラウザに表示されません、アドレス、入力 1 2022/07/26 19:43
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- その他(プログラミング・Web制作) ワードプレスのプラグインであるAddQuicktagを使いたいが… 3 2022/04/18 15:03
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- ヤフオク! ヤフオクに出品したいのですが、タグを実行出来ません。 2 2022/09/16 12:36
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- HTML・CSS 【CSS】特定のリンクを含むaタグを指定できるかどうか? 3 2022/10/15 02:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIのtextareaへのタグの表示
-
Application.ScreenUpdating = ...
-
16進の10進変換について
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
python3について。
-
CGI(Perl)で、Net::FTPを使いたい
-
<SELECT>タグの折り返し
-
【至急!!!】python言語で本を見...
-
sendmailで複数アドレスに送信...
-
実行中の変数の中身をイミディ...
-
UWSCのSELECT文の記述方法
-
Python - Excel で Webからデー...
-
メモリをアドレスを直接指定し...
-
フォームの日本語が文字化け
-
pythonで演算子を変数に代入す...
-
文字の横にプルダウンを表示さ...
-
VB6で、長い時間かかる処理...
-
phpでボタンを押したときに変数...
-
セレクトメニューで2つの項目...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコン → パャRン
-
my $html<<EOMの意味を教えてく...
-
TXTに出力すると文字化けが起こる
-
テキストエリアにテキストファ...
-
テキストエリアの改行を取得したい
-
結果を得て自動的にページ移動...
-
malformed header from script....
-
perlで作ったcgiがIE6で西ヨー...
-
SSI にグローバル変数を渡すこ...
-
スマートフォンからの荒らし対策
-
Pythonを用いてCGIを作る勉強を...
-
出来ているHTMLに無料CGIをつけ...
-
CGIから出力される文字が化けて...
-
TeraPadでよく使う文字を特定キ...
-
テキストファイルの読み込み
-
CGIにおいて、エンコード・文字...
-
CGI内からSSIを実行した...
-
1つのプログラム内で"html出力...
-
何がいけないんでしょうか?
-
Apacheのログにエラー出力
おすすめ情報