• ベストアンサー

TEXTAREAの改行がうまくいきません。

自作で掲示版を作成している、初心者です。現在作成中の掲示版にTEXTAREAに入力し、LOG上では1行目<BR>2行目といった形で改行をBRに置き換えて保存していますが、その修正としてLOGからデータをとり改行状態で表示させたいのですが、 うまく改行されない状態です。下記にLOGより読み込み。タグを\rに置き換えて いますが、TEXTAREAに表示されなく、改行表示どころではありません。 いったいどうすればよいのでしょうか?ご教示をお願いします。 <CGI文> $wkaaa1 = $IXUSERINF{Enaiyo}; データを取得 $wkaaa =~ &notag1($wkaaa1);  変換(これがおかしい?) $mesbuff .= "<TR><TD nowrap ><TEXTAREA ROW=\"10\" COLS=\"48\" NAME=\"Enaiyo\" WRAP=\"soft\">$wkaaa </TEXTAREA></TD></TR>"; <sub> sub notag1 { local($_) = @_; s/&/&amp;/g; s/"/&quot;/g; s/</&lt;/g; s/>/&gt;/g; s/&lt;br&gt;/\n/gi (これで <BR>を\n(改行)にしてるつもり return $_; }

質問者が選んだベストアンサー

  • ベストアンサー
  • so_blue
  • ベストアンサー率48% (50/104)
回答No.5

>上記のパターンをそれぞれ入れてみてやってみましたが、 これで上手くいくと思っていたのに残念ですね.... 試験的に、改行でない文字に置換できるか確認してみてはどうでしょう。 # $WEnaiyo =~ s/<BR>/HENKAN/g; # のような感じで。 これでダメなら、改行文字ではなく「置換」そのものに不具合があると考えられます。 ログデータの最後の項目に変化を施すようなので、 これだけで試してみてはどうでしょうか。 # 未テストなのでscript確認してください(汗 open(FH,"$logfile") or die "$!"; foreach(<FH>){ my @line = split(/,/,$_,); $line[$#line] =~ s/<BR>/HENKAN/g; print "$line[$#line]\n"; } close(FH);

mangin
質問者

補足

何度も申し訳ありません。上記のひょうに変更したところ、 <BR>を違う文字に変換するようにしましたら、下記のようになりました。 例 AAAAHENKANBBBBHENKANCCCC(といった具合に変換はできましたが) なぜか改行コードにはおきかわらなく、そのまま詰まって1行で表示されます。 ほんとどうすればいいのでしょうか?

その他の回答 (4)

  • FUCKIE
  • ベストアンサー率33% (1/3)
回答No.4

$WEnaiyo =~ s/<BR>/\n/g; を $WEnaiyo =~ s/<BR>/\r\n/g; か $WEnaiyo =~ s/<BR>/\r/g; に して試してみてはどうでしょう。

mangin
質問者

補足

おそくなりましてすみません。(レンタルしていたサーバーがダウンしその復旧で...) 上記のパターンをそれぞれ入れてみてやってみましたが、 何もかわらなのです。 元のデータ(LOG)を作成するときに何かたりなのでしょうか? (JCODE等は使用していません) もうすこしだけお付き合い願えないでしょうか?

  • so_blue
  • ベストアンサー率48% (50/104)
回答No.3

自分がREVISIONモードを作ったときの流れは、 ログデータを@lineに取得.... foreach(@line){ chomp; ($foo,$bar)=split(/,/,$_); $bar =~ s/<BR>/\n/g; } こんな感じでTEXTAREAに$barを改行表示させています。 ここ以外に、関係のありそうな部分はないですか? しかし表示はされているとの事なので、置換部分に問題があるんだとは思いますが.... 文字コードだったり環境が影響している可能性もあるかもですね。 ご参考に、改行コード変換の解説サイトを入れておきます。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
mangin
質問者

補足

so_blue さん、お世話になります。 ご指摘のとおりデータ取得時に下記のように修正し、CGI側はそのまま出力するようにしましたが、結果は、aaabbbcccとつながって1行で出力されます。 ほんと何がいけないんでしょうか? <sub> foreach(@buffer) { ($a, ~ ,$WEnaiyo) = split(/,/,$_,); $WEnaiyo =~ s/<BR>/\n/g; $IXUSERINF{Enaiyo} = $WEnaiyo; } ハッシュがいけないのでしょうか?(多分関係ないと思います) 改行コードが入らないのはなぜ?

  • so_blue
  • ベストアンサー率48% (50/104)
回答No.2

自分には、TEXTAREA内で s/</&lt;/g; s/>/&gt;/g; にしている理由が分かりませんが.... タグがあると何か不都合があるのでしょうか??? これをなくすか、使う場合はこれより先に、 s/<BR>/\n/g; で上手く動作しないでしょうか。

mangin
質問者

補足

何度もすみません。 <sub> sub notag1 { local($_) = @_; s/<BR>/\n/g; (修正しました) s/&/&amp;/g; s/"/&quot;/g; s/</&lt;/g; s/>/&gt;/g; s/&lt;br&gt;/\n/gi; return $_; } にしたところ、TEXTAREA内にaaa<BR>bbbb<BR>cccといった形で改行されず、<BR>の文字がそのまま出力されます。 やはりタグを消さないといけなのではないでしょうか? すぐにでも、回答を締め切り、POINTを差し上げたいのですが、もうすこし初心者に つきあってください。

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.1

> $wkaaa =~ &notag1($wkaaa1);  変換(これがおかしい?) はい。おかしいです。 チルダを取って、$wkaaa = &notag1($wkaaa1); にしてください。

mangin
質問者

補足

早速の回答ありがとうございます。ご指摘のとおり、チルダをはずしたら TEXTAREAには表示されるようになりましたが、改行されません。 どうすれば良いか改めて回答をおねがします。 <表示内容> aaaaabbbbbccccc(1行で表示されます。a b c の間で改行したいのですが) <希望表示> aaaaa bbbbb ccccc のように3行にしたいのです。