「これはヤバかったな」という遅刻エピソード

<textarea>に入力された値をPOSTで渡し、ポスグレに書き込み、それをHTML上で表示する処理をしているのですが。
textareaで改行を入力した場合に、
DB内に改行が登録されません。

例:
*textareaのwrapはsoftに設定してあります。

あいうえおかきくけこ
さしすせそ

と入力すると。
DBには
「あいうえおかきくけこ
さしすせそ」
と登録され

表示では「あいうえおかきくけこさしすせそ」と表示されます。

ソースでみると
「あいうえおかきくけこ
さしすせそ」と表示されています。

改行コードの置換がされていないのだと思い
INSERT前に
s/\r\n/<BR>/g;
s/\r/<BR>/g;
s/\n/<BR>/g;
を使い置換をすると
DBには何も登録されません。

よろしくお願いいたします。

A 回答 (2件)

> デフォルト文字列というのはどのよう状態のことを言うのでしょうか?



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

あ、これこれ、これのことです。
正規表現自体は問題なさそうだったのですが、どの文字列(変数)をどこに入れているか、を知りたかったのです。
おそらく、POSTデータを$strに入れておいて、$strのうちの\r\nを<BR>に変換する、という処理をされたいのでしょうから、上記構文になると思いますが、実際はどうされていたのでしょうか?(ちょっと文章からは読み取れなくって・・・すみません)

あれ?改行(CRLF)って\r\nですよね?
\n\rだとヒットしないかも・・・?
    • good
    • 0
この回答へのお礼

解答ありがとうございます。
あ、ホントだ。そこは補足時のミスです。

先ほど自己解決はいたしまして。

完全なこちらのミスで置換部分は関数にしていたのですが
そこにreturnが抜けておりました。

該当個所をすべてコピペしておけばよかったですね。
ちょー初歩的なミスにお付き合い、いただきありがとうございました。

お礼日時:2005/09/21 10:29

> DBには


> 「あいうえおかきくけこ
> さしすせそ」
> と登録され
>
> 表示では「あいうえおかきくけこさしすせそ」と表示されます。

DB上は「あいうえおかきくけこ\r\nさしすせそ」と登録されていて、それをHTMLで表示させると\r\nは(表示されないので)無視されているということではないでしょうか。

CRLFを<BR>に変換する正規表現のところは文法的には間違っていないようですが、ご質問の内容だけではデフォルト文字列がどう扱われているかわからないので・・・。そのあたりを見直してみてはいかがですか?

この回答への補足

お早い回答ありがとうございました。

デフォルト文字列というのはどのよう状態のことを言うのでしょうか?
POSTで値が渡って受け取るときは
CGI.pmのparamを使って取得しています。
それ以外はINSERTするときに「¥」とかをエスケープする処理だけをしています。

置換する時にbinmodeを使用して
$str = "あいうえおかきくけこ
さしすせそ";
binmode($str);
の方がいのでしょうか?
$str = ~s/\n\r/<br>/g;
みたいな感じになるんでしょうか?

んーわからなくなってきました。
よろしくお願いします。

補足日時:2005/09/20 23:51
    • good
    • 0

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