プロが教える店舗&オフィスのセキュリティ対策術

シンプルなCGI掲示板の勉強中ですが、

$message =~s/[ \r\n , \n ]/<br \/>/g; となっており、
これは改行文字を<br />に置き換えるのだそうですが、
[ \r\n , \n ]の部分というのはどういった意味でしょうか。

[ abc ]だと、a,b,cのうちどれか1文字は入っていれば良いですよね。
[ ]に「,」が入るとよく分からなくなります。

お分かりの方、教えてくださいませんか。
よろしくお願いいたします。

A 回答 (3件)

サンプルは、


$message =~ s/\r\n/<br \/>/g;

$message =~ s/\n/<br \/>/g;
1行で済ませようとして間違ってしまったのでしょうか?

\r 復帰文字(return)

\n 改行(newline)

「,」カンマそのもの

\r 復帰文字 (return)
のいずれかを<br />に置き換える、という意味になってしまうでしょうね。
この目的のためには、

$message =~ s/\r\n/<br \/>/g;
$message =~ s/\r/<br \/>/g;
$message =~ s/\n/<br \/>/g;

と3行記述するのがいいのではないでしょうか?

参考サイトに私が勉強させてもらっているサイトを紹介しておきます。

参考URL:http://www.rfs.jp/sitebuilder/perl/04/07.html
    • good
    • 0
この回答へのお礼

ご指導くださいまして、どうもありがとうございます。
Kirishima様や他の方たちのご説明から判断して、

$message =~ s/\r\n/<br \/>/g;
$message =~ s/\r/<br \/>/g;
$message =~ s/\n/<br \/>/g;

の3行で記述したほうが無難な気がしますね。

ご質問したソースは「CGI/Perl Handbook」の掲示板ソースにありますが、
間違い又は不十分なのですね。
Kentさんの本には、ご説明のソースが載っていました。

ほぼ同じ掲示板でも記述の仕方がいろいろあり、本当に困ってしまいますね。

また機会がありましたら、ご指導いただきたいと思います。
どうもありがとうございました。

お礼日時:2002/09/06 18:12

この文の意味が


一般的な改行コード「\r\n」「\n」を
XHTMLの改行要素「<br />」に変換する
という事でしたらこの文は間違いです。

上の意味の文は
$message =~ s/\r?\n/<br \/>/g;
となります。
ただし改行コードはMACの「\r」もあるので
これでは不充分です。
「\r」も置きかえるようにようにしてください。

[ ]内の「,」はただのコンマです。
なんの意味もありません。
    • good
    • 0
この回答へのお礼

ご指導いただきまして、どうもありがとうございます。
CGI初心者で、いろんな書籍を購入して勉強していますが、
「改行コード処理」一つをみても、
ソースの記述がいろいろあって、混乱していまいます。

Macの\rにも対応となると、ご質問したソースでは不十分なのですね。
結局一行では全て済ませることができないということになりますね。
大変よくわかりました。どうもありがとうございます。

お礼日時:2002/09/06 17:50

実験:



% cat a.pl
@msgs = (
"ab\ncd\n",
"ab\r\nc",
"ab\n\r",
"ab,c d\n" );
for $message ( @msgs ){
$message =~s/[ \r\n , \n ]/<br \/>/g;
print $message, "\n";
}

% perl a.pl
ab<br />cd<br />
ab<br /><br />c
ab<br /><br />
ab<br />c<br />d<br />

――ということで、「空白」「カンマ」「復帰」「改行」を、<br />に全置換する、で、あっているかと。
    • good
    • 0
この回答へのお礼

実験データを示してくださいまして、どうもありがとうございます。
大変参考になりました。

お礼日時:2002/09/06 17:43

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