電子書籍の厳選無料作品が豊富!

フォームを使い書き込まれた内容を表示させるのに、
<TR>などのタグをタグとしてではなく、単なる「<TR>」という文字として表示させるためには
TEXTAREAしか方法はないのでしょうか?
<B>などはまぁいいのですが、<TR>などですと、レイアウトが崩れるほかに、文字の表示が正常に行われません。

A 回答 (12件中1~10件)

<を&lt;とするのは、Perlの仕様ではなくて、HTMLの仕様です。



ですから、HTMLのソースコードに、
&lt;tr&gt;
と書くと(または書いてあると)、
ブラウザの画面には、
<tr>
と表示されるわけです。

逆に、HTMLのソースコードに
<tr>
なんて書いてあったら、それこそHTMLとして解釈されて、テーブルが崩れるはずですが....
    • good
    • 0
この回答へのお礼

&lt;とかくと<と表示されて、でもタグにはならないんですね!
ちょっとひとつ利口になりました。
今までタグを表示させる時にはtextareaを使用していました。

お礼日時:2003/09/08 12:13

出力さえされないってのは変ですなぁ。


ひとまず、こちらで再現してみないと問題点が指摘できないんでぇ、

サンプルのデータファイル(の一部)と、
表示を担当しているコードの一部を書いていただけませんか?

可能性ばかり論じていても収拾つきそうにありませぬ。

この回答への補足

●表示用

open FILE, "<log.log";
flock(FILE,2);
@log = <FILE>;
flock(FILE,8);
close FILE;

$gyou = @log;

for ($i=0;$i<$gyou;$i++){
# 日付順
@sort2 = sort{(split(/&/,$b))[1] cmp (split(/&/,$a))[1];} @log;

$sort2[$i] =~ s/&quot;/"/g;

print "<TABLE>\n";
print "<TR>\n";

@log_data = split(/%/,$sort2[$i]);
foreach (@log_data){
($key,$value) = split(/=/,$_);

$FORM{$key} =~ s/&lt;/</g;
$FORM{$key} = $value;

$FORM{$key} =~ s/%3D/=/g;
$FORM{$key} =~ s/&lt;/</g;
$FORM{$key} =~ s/&gt;/>/g;
$FORM{$key} =~ s/%3c/</g;
$FORM{$key} =~ s/%3e/>/g;
$FORM{$key} =~ s/%2d/-/g;
}

print "<TD WIDTH=80><font color=deeppink>&hearts;</font><font color=deeppink>♡</font>$FORM{'DATE'}</TD>\n";
print "<TD WIDTH=550><A HREF='search.cgi?KEY=$FORM{'SEARCHKEY'}'>$FORM{'TITLE'} [$FORM{'TIME'}]</A></TD>\n";

} #for




こんな感じになってます。

補足日時:2003/09/08 12:10
    • good
    • 0
この回答へのお礼

●書き込み用
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});

$buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$buffer =~ s/"/"/g;
$buffer =~ s/</</g;
$buffer =~ s/>/>/g;
$buffer =~s/\r\n/<BR>/g;
$buffer =~s/\r/<BR>/g;
$buffer =~s/\n/<BR>/g;
$buffer =~ tr/+/ /;
$buffer =~ s/'/\'/g;
$buffer=~ s/
//g;

foreach $pair (split(/%/,$buffer)){
($name,$value) = split(/=/, $pair,2);
$value =~ tr/+/ /;
$FORM{$name} = $value;
$FORM{$name} =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} =~ s/"/"/g;
$FORM{$name} =~ s/</</g;
$FORM{$name} =~ s/>/>/g;
$FORM{$name} =~s/\r\n/<BR>/g;
$FORM{$name} =~s/\r/<BR>/g;
$FORM{$name} =~s/\n/<BR>/g;
$FORM{$name} =~ tr/+/ /;
$FORM{$name} =~ s/'/\'/g;
$FORM{$name} =~ s/
//g;
$TITLE = $FORM{'TITLE'};
$DATE = $FORM{'DATE'};
$NAKAMI = $FORM{'NAKAMI'};
$WORD = $FORM{'WORD'};
}


open(FH,">>log.log");

print FH "TITLE=$TITLE%DATE=$DATE%NAKAMI=$NAKAMI%TIME=$year/$mon/$day $hour:$min:$sec%SEARCHKEY=$year$mon$day$hour$min$sec\n";
close(FH);

お礼日時:2003/09/08 12:10

>勝手に=と&で設定されてるんでしたっけ?


>これを=と%にするにはどのような設定が必要なんでしょうか?

設定云々の前に,「=」と「&」以外にできませんね。

<input type="hidden" name="field1" value="1234">
<input type="hidden" name="field2" value="5678">
(↑このソースは間違っている可能性もあります)

とした場合,送られるデータは

field1=1234&field2=5678

として送られます。これはHTTPの仕様だと思いますので,CGI作成者が設定できるものではないです。

ちなみに,半角スペースは「+」となります。ご参考までに。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

そうですかー。
やっぱり無理なんですね…。
やったことないなぁとは思いましたが。。

+と'は以前に指摘されて覚えていました。

お礼日時:2003/09/08 12:02

>ログファイル記述時に&は使わない方がベストなのでしょうか?



それはKODAMARさん次第です。同じ1つのことを実現するにしても,プログラムを書く人によって違いますから。
ですから,KODAMARさんが「&」を使わないほうがいいと思うなら使わないほうがいいです。使わないなら使わないなりに自分でプログラムを書いてください。


掲示板はPerlの参考書などを見ながら作られていますか?
でしたら掲示板のプログラムも載っていると思います。それを見てログの保存,読み込み,表示をどのように処理しているか見てみてください。
以前の質問で,解読するのも難しいと書かれていましたが,ある程度プログラムが読めないとプログラムを書くのは結構難しいと思いますよ。
何事も覚えるには "読み・書き" が大事!!(^^;)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

どーしても&だとうまくいかなそうなので、%を使ってやってみようかなーと思い出したところです。
たまには変えてみて、いつも「当たり前」だったことを復習してみるのもいいかと。
早速つまづきましたが(笑)
フォームのデータって何も設定しないと、勝手に=と&で設定されてるんでしたっけ?
これを=と%にするにはどのような設定が必要なんでしょうか?
よくよく考えたらやったことありませんでした。

掲示板は今までの自分なりに蓄積した概念と、途切れ途切れのコードを組み合わせてつくってます。
説明書などは、その途中でちょこっと見たりする程度で、流れは自分なりに考えてつくってますので、
一般論からすると、おかしな流れやコードになってると思われます。
これが完成し、無事動くようになったら、書籍を見て、プロが書くコードと照らし合わせてみようと思っています。

お礼日時:2003/09/05 19:26

> というように=と&で行っているので、<>で誤動作は考えにくいのですが。


&lt;や&gt;には&が含まれていますけど、処理上に問題はないですか?

とりあえず、「HTMLソースに問題あり」というのがはっきりしたので、
そこからまた新たな手がかりが見えてくるかと。

この回答への補足

追加です。
表示用のcgiファイルでは、&lt;などは勝手に表示される、とのことで消したのですが…
<B>テストです。
あー。

と入力して、表示させたのですが、何も表示されません。
ソースにも表示されません。

ログファイルを開くと、

&lt;B&gt;テストです。&lt;BR&gt;あー。

と入っているので、入力はきちんと行われているようです。
なぜ<や>は表示されないのですか?

補足日時:2003/09/05 18:47
    • good
    • 0
この回答へのお礼

すいません、思い出しました。
&lt;などには&が使われているから強制的に<に戻そうと思ってcgiかいたことを…。

ログファイル記述時に&は使わない方がベストなのでしょうか?

お礼日時:2003/09/05 18:55

> ソースの方をみてみても、同じくその後は入力されていません。


> …ということは<TR>のタグが原因ではないですね…スイマセン。
まったくの勘ですが、ログのセパレータに<>なんかを使っていてばっさり削除されてしまったとか?
(もうすこし情報がないとなんともいえません)

・・・で、ちょっと気になったのが、
フォームへ入力したタグが、そのままタグとして機能してしまうのは、
レイアウト崩れよりもセキュリティとして大問題なので注意したほうがよいですよ。

> <TR>などのタグをタグとしてではなく、単なる「<TR>」という文字として表示させるためには
> TEXTAREAしか方法はないのでしょうか?
<textarea></textarea>で囲まれた部分はタグとして機能しませんのでそのまま表示されますが、
こんな感じ↓でフォームへ入力されたら危険です。

</textarea><span style="font-size:100px;">巨大</span>

参考URL:http://www.atmarkit.co.jp/fsecurity/special/30xs …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
今つくっているのは私以外誰も使うものではないのでセキュリティは気にする必要はなく、楽なんですが…。
(公開するものはタグ禁止にします。)

ログファイルの書き込みは
1つめのタイトル(表記名)=1つめのデータ&2つめのタイトル…
というように=と&で行っているので、<>で誤動作は考えにくいのですが。。

お礼日時:2003/09/05 18:33

気になっていたのですが、あなたの言う表示ってどれのことですか?ブラウザでの表示?それともブラウザでいう「ソース」での表示?



それぞれ意味が違いますのでそれをはっきりさせましょうや。

で、ブラウザでの表示に関する場合は、「ソース」をブラウザがHTMLなどとして解釈した結果ですので、本来ココで問題になるべきは、「ソース」でしょう?

下でお聞きの、「<tr>の後から表示が無い」ってのもソースには出力されているのですか?結構重要なことだと思いますよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
表示がされない、と言っている「表示」は「ソース」のことです。
混乱させてすいません。

ソースの方をみてみても、同じくその後は入力されていません。
…ということは<TR>のタグが原因ではないですね…スイマセン。

これは何が原因かおわかりになりますか?

お礼日時:2003/09/05 18:04

>今の状態では&lt;が<に、&gt;が>に表示されるようになってます。


どうも、この作業が、余計っぽいです。
HTMLのソースに「&lt;」があれば、ブラウザが自動的に「<」に見せてくれるんです。
なので、&lt;を、変換せずに、そのまま出力すればいいかと。

つまり、テーブルの中に

「たとえばテーブルのタグには<TR>などがあります。」
と書きたいのなら、CGIの出力として、

<TR><TD>たとえばテーブルのタグには&lt;TR&gt;などがあります。</TD></TR>

とすればいいはずです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

&lt;や&gt;の変換記述は削除しました。

Print #FNO, &quot;&lt;TR&gt;&quot; (ログファイル抜粋)
という文字なんですが、
実際は
Print #FNO, "<TR>"
と表示される予定ですが、
Print #FNO, "
までしか表示されません。

この後にも文章が続くのですが、それも全部表示されません。
そこでタグだからかな?と思ってたんですが、違うんですかね?
これを表示させるにはどうしたらいいのでしょうか?

お礼日時:2003/09/05 17:49

selene_plさんの書かれたとおりでできます。


CGIが書き出すHTMLソース上で「&lt;TR&gt;」とすれば,HTMLの表示上は<TR>となりますので。

例を示すと…

<TR><TD>たとえばテーブルのタグには&lt;TR&gt;などがあります。</td></tr>
↓表示結果
たとえばテーブルのタグには<TR>などがあります。

となります。

>今の状態では&lt;が<に、&gt;が>に表示されるようになってます。(ログファイル呼び出し時)

となっていますが,これはHTMLソースを書き出すときにこの変換作業をしているのですか? でしたらこれは必要ないです。上の例が示すとおり,変換作業無しに「<TR>」と表示することできます。
    • good
    • 0
この回答へのお礼

知りませんでした。
今まで無駄なことをかいてたんですね~。


Print #FNO, "<TR>" (ログファイル抜粋)
という文字なんですが、
実際は
Print #FNO, "<TR>"
と表示される予定ですが、
Print #FNO, "
までしか表示されません。

この後にも文章が続くのですが、それも全部表示されません。
そこでタグだからかな?と思ってたんですが、違うんですかね?
これを表示させるにはどうしたらいいのでしょうか?

お礼日時:2003/09/05 17:48

> 今の状態では&lt;が<に、&gt;が>に表示されるようになってます。

(ログファイル呼び出し時)
> ただコレですと、例えば今はテーブルでログファイルの表示のレイアウトを作っているんですが、いきなり<TR>とか出たらそこでテーブルのレイアウトが崩れてしまいますよね?

&gt;や&lt;は、htmlで表示時には自動的に、
単なる文字としての「>」「<」として表示されるだけなので
タグと認識されないので、テーブルは崩れないと思います。

もし心配でしたら、ログに保存するときは<TR>のような形のままにして、
ログファイル読み込み時に「<」を「&lt;」に「>」を「&gt;」に変換して、
テーブル内に表示していけばどうでしょう?
    • good
    • 0
この回答へのお礼

&gt;や&lt;はわざわざ変換しなくていいんですね!
知りませんでした。
早速変換させてたところを消してみました。

ですがやはりできない…。

Print #FNO, &quot;&lt;TR&gt;&quot; (ログファイル抜粋)
という文字なんですが、
実際は
Print #FNO, "<TR>"
と表示される予定ですが、
Print #FNO, "
までしか表示されません。

この後にも文章が続くのですが、それも全部表示されません。
そこでタグだからかな?と思ってたんですが、違うんですかね?
これを表示させるにはどうしたらいいのでしょうか?

お礼日時:2003/09/05 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!