ただいまperlにて掲示板を製作中です。PC上でApacheを使いチェック中なのですが、タグなどで仕様する不等号を変換することが出来ません。下記のように処理しているのですが、なぜか変換されません。
foreach (@data){
s/&/&/g;
s/>/>/g;
s/</</g;
s/"/"/g;
s/\r\n/\<br\>/g;
s/\n/\<br\>/g;
}
ちなみにs/&/&/g;の[&]の部分を[AA]等に変更すると
問題なく[&]は[AA]に変更されます。
なぜなのでしょうか?表示時にタグとして認識されてしまい困っております。どうかご教授下さい。
No.7ベストアンサー
- 回答日時:
>(3)→(4)への受け渡し時に問題があるようです。
同一CGIでの処理かと思っていましたが、
(3)ブラウザで表示→フォーム送信→CGIで受け取る(4) ですか?
>つまり、ブラウザを通すとデコードされます。
#5の回答に書きましたが、そういうことです。
ブラウザを通した段階で、デコードされますので、(4)で再度エンコードの必要があります。
>splitで分割した物も$writelogに反映されてしまうのでしょうか?
splitしたものは、別の変数に入れてますよね?これは関係ないと思います。
>(3)→(4)へは$writelogをそのまま受け渡していたので問題ないと思っていたのですが、
そのままとは、 $writelogをformのhiddenで渡しているって事でしょうか?何にしろ、ブラウザがHTMLを解釈する段階でデコードされますので、ブラウザを経由したら再度エンコードの必要がありますよ。
>ためしに(4)の段階で再度、置換作業をしてみたところ掲示板でもうまくいきました。
これは必要な処理ですね。問題解決かな。
お疲れ様でした。
有難うございました!
その通りhiddenで渡してました。
てっきり出力はされていないので大丈夫だと思っていました。
しかしhiddenで受け渡してもダメだったのですね。
親切に有難うございました。
No.6
- 回答日時:
再度の補足有難うございます。
しかし、疑問は深まる一方です。(^^;説明のため番号を付けて置きます。
(1) 名前(name) メール(mail)・・・受け取ります。
(2) 置換をします、@dateをjoinして($writelog)します。
(3) $writelogをsplitし一度でブラウザに表示します。
(4) $writelogをログファイルに書き込む。
フォームで名前を <b>aaa</b> と入力したとします。
(3)のブラウザ上の表示は
(a) <b>aaa</b>
(b) aaa (太字)
(c) <b>aaa</b>
(a)ですよね?この段階では正常ですよね?
(b)なら置換されていません。
(c)にはなりません。
ひょっとして、ログファイルをブラウザで開いてます?
(2)の後、(3)の後で $writelog の内容を出力してみてください。
open(IN,">>test.txt");
print IN $writelog;
close IN;
この回答への補足
こちらこそご丁寧に有難うございます。
(1) 名前(name) メール(mail)・・・受け取ります。
(2) 置換をします、@dateをjoinして($writelog)します。
(3) $writelogをsplitし一度でブラウザに表示します。
※誤字がありました。すいません。一度ブラウザにです。入力内容を確認しています。
(4) $writelogをログファイルに書き込む。
※補足この間サブルーチンを3個使用してまして(1)(2)sub1→(3)sub2→(4)sub3となっております。
>(2)の後、(3)の後で $writelog の内容を出力してみてください。
(2)の後、(3)の後それぞれ
<b>aaa</b> となりました。
(4)でも出力してみたところ
<b>aaa</b>となってました。
原因はそこみたいです。
ためしに(4)の段階で再度、置換作業をしてみたところ掲示板でもうまくいきました。(3)→(4)への受け渡し時に問題があるようです。
(3)の段階でブラウザに表示する内容はsplitで分割した物を出力し(3)→(4)へは$writelogをそのまま受け渡していたので問題ないと思っていたのですが、splitで分割した物も$writelogに反映されてしまうのでしょうか?もしかして原因なのでしょうか?
No.5
- 回答日時:
ご存知だとは思いますが、念のため。
<html><body>
&aa
<bb>
"cc"
dd<br>dd
ee<br>ee
</body></html>
これをブラウザで表示すると
&aa <bb> "cc" dd
dd ee
ee
こうなります。つまり、ブラウザを通すとデコードされます。
>'&aa','<bb>','"cc"',"dd\r\ndd","ee\nee"とこのままの状態でログテキストに保存されてしまします。
ログテキストとは何でしょう?
この置換部分は問題ないと思いますので、置換した後、ログを書き出すまでに、ブラウザのフォームなどで再変換されているのでは?
置換してから、ログテキストを書き出すまでの流れを教えてください。
この回答への補足
すいません、ログテキストとは書き込まれた内容を保存しておくテキストファイルのことです。説明不足でした。
流れを書きますと、
まずブラウザ上での投稿内容を入力しその内容を
名前(name) メール(mail) タイトル(title) メッセージ(mess)として受け取ります。
↓
受け取った内容を@dateとして、それを置換をします(問題部分)、@dateをjoinして($writelog)します。
↓
投稿の内容を確認するためのサブルーチンで
$writelogをsplitし一度でブラウザに表示します。
↓
$writelogをログファイルに書き込む。
以上のような流れになっております。
No.4
- 回答日時:
#3です。
ブラウザ上で見てますよね。
それなら、置換されてますよ。
ソースを表示して確認してください。
この回答への補足
失礼致しました。
No.3のお礼のところに書いてしまったのですが、
それだけで実行したところ
&aa
<bb>
"cc"
dd<br>dd
ee<br>ee
となりました。
しかし製作中の掲示板cgiをですと
'&aa','<bb>','"cc"',"dd\r\ndd","ee\nee"と書き込みを
してもまったく変換されず
'&aa','<bb>','"cc"',"dd\r\ndd","ee\nee"とこのままの状態でログテキストに保存されてしまします。
ちなみに[AA]へ置換したところ問題なくログテキストに[AA]で保存されました。cgi初心者なのでまったく解らないのですが、&や不等号"等を変換してはいけない設定などあるのでしょうか?解らずにしていたなんてこともあるのでしょうか?
No.3
- 回答日時:
例:
@data = ('&aa','<bb>','"cc"',"dd\r\ndd","ee\nee");
foreach (@data){
s/&/&/g;
s/>/>/g;
s/</</g;
s/"/"/g;
s/\r\n/<br>/g;
s/\n/<br>/g;
}
$" = "\n";
print "@data";
結果:
&aa
<bb>
"cc"
dd<br>dd
ee<br>ee
うちの環境では正常に置換されました。
そちらでは、実際どう置換されます?
上記の例の結果を教えてください。
この回答への補足
下記で出力してみたところ
my@data = ('&aa','<bb>','"cc"',"dd\r\ndd","ee\nee");
foreach (@data){
s/&/&/g;
s/>/>/g;
s/</</g;
s/"/"/g;
s/\r\n/<br>/g;
s/\n/<br>/g;
}
$" = "\n";
print "Content-type:text/html\n\n";
print "@data";
結果は
&aa <bb> "cc" dd
dd ee
ee
となりました。
補足の補足です。すいません
open(IN,">>test.txt");
print IN"@data";
とテキストに書き出したところ、
&aa
<bb>
"cc"
dd<br>dd
ee<br>ee
となりました。
しかし製作中の掲示板cgiをですと
'&aa','<bb>','"cc"',"dd\r\ndd","ee\nee"と書き込みを
してもまったく変換されず
'&aa','<bb>','"cc"',"dd\r\ndd","ee\nee"とこのままの状態でログテキストに保存されてしまします。
ちなみに[AA]へ置換したところ問題なくログテキストに[AA]で保存されました。cgi初心者なのでまったく解らないのですが、&や不等号"等を変換してはいけない設定などあるのでしょうか?解らずにしていたなんてこともあるのでしょうか?
No.1
- 回答日時:
> s/>/>/g;
> s/</</g;
> s/"/"/g;
「>」「<」「"」を\でエスケープしてみるとか [>] で単一指定化してみるとか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- HTML・CSS HTMLソースの質問 3 2022/07/28 13:29
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA メール作成について ...
-
number 改行が追加できない
-
MACの改行コード変更について教...
-
Rstudioによるテキストマイニン...
-
エクセルで「改行コード」を「...
-
【HELP!!】Excelから保存したtx...
-
改行コードがそのまま表示され...
-
ホームページビルダーで行間を...
-
CGIで改行タグを改行コードに変...
-
perlで、[ \\r\\n , \\n ]の意...
-
表(<table>)の直前が、改行さ...
-
if文中で@***(配列変数)って...
-
Line Inputにて改行があっても...
-
CGIを勉強しています。¥n(改...
-
ポインター引数の関数でコンパ...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
ビットスワップとバイトスワッ...
-
全角半角を調べるライブラリ関...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA メール作成について ...
-
CGIを勉強しています。¥n(改...
-
改行コードがそのまま表示され...
-
Line Inputにて改行があっても...
-
Rstudioによるテキストマイニン...
-
Excelで、HTMLタグだけを削除す...
-
エクセルで「改行コード」を「...
-
MACの改行コード変更について教...
-
【HELP!!】Excelから保存したtx...
-
ホームページビルダーで行間を...
-
perlで、[ \\r\\n , \\n ]の意...
-
alertの警告文を2行にしたい
-
連想するもの教えてください
-
テキストボックスに入力された...
-
全文表示…の仕方。
-
メモ帳での改行
-
PHP <br /> <br> 結局どっち?
-
改行コードについて
-
brタグについて質問です。
-
if文中で@***(配列変数)って...
おすすめ情報