• ベストアンサー

文章の改行の取り扱いについて

CGIをPerlで組んでいます。 掲示板を運営しておりまして、利用者がTextareaフォームで文章を入力するのですが、改行がいつの間にか認識されなくなってしまいました。 認識されなくなったというのは、登録の時ではなくて、保存したモノを呼び出す時です。 保存の仕方が悪いのかと思ったりもしますが、 突然そうなってしまったので、理由がよく分かりません。 (1)一般的に、改行のエスケープシーケンスは \n と \r があるかと思うのですが、 それぞれ何が違うのでしょうか? ちなみに掲示板はi-modeとPCと両方に対応しており、 同じ内容をi-modeでもPCでも読めるようになっています。 (2)また、入力された文章をファイルに保存する時の 改行コードの置換は どのような方法がベストなのでしょう? なにか手がかりになるようなコメントでも構いませんのでよろしくお願いいたします。 _

  • u16
  • お礼率40% (100/250)
  • CGI
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • freesk
  • ベストアンサー率57% (4/7)
回答No.1

\nはLF(ラインフィード) \rはCR(キャリッジリターン) ラインフィードとかキャリッジリターンというのはタイプライターの名残だとは思いますが、詳しくは知りません で、OSによって改行コードの扱いがちがうんです。 Windows CR LF \r\n Macintosh CR \r UNIX LF \n ですから置換はPerlの置換演算子を使うのが手っ取り早いかと こんな感じに... #WINDOWSの改行コードを<BR>タグに $string=~ s/\r\n/<BR>/g; #Macの改行コードを<BR>タグに $string=~ s/\r/<BR>/g;

u16
質問者

お礼

早速のご回答ありがとうございます。 WIN、MAC、UNIXによって違うんですね。 ってことは 環境変数でOSを特定した上で 置換演算の方法を変えなければいけないのでしょうかね。 ん~~なかなか難儀ですね。 参考になりました。 ありがとうございます。 _

その他の回答 (1)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

下記ページが非常に参考になります。ご一読ください。 ・改行コードを統一する ・改行コードを <BR> に変換する ・改行コードを削除する

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

お礼

大変参考になるページをありがとうございます。 なかなか奥が深いんですね。 勉強させていただきます。 いろいろ試してみて、ご報告します。 ポイントは必ず発行しますので。 _

関連するQ&A

  • <TEXTAREA>の文字入力が自動改行されません

    私の環境はWindows8でIE11です。 実は私が作ったPerlの掲示板の<TEXTAREA>に文字入力をしようとしたら、自動改行されないのに気付きました。 ソースは、次の通りです。 <textarea name=comment cols=70 rows=12 wrap=soft style="font-size:15px"></textarea> どっかに問題があるのでしょうか? それとも、私のPCの環境のせいでしょうか? ちなみに、他のサイトの<TEXTAREA>だと私のPCでも自動改行されます。

  • Perlでの改行コードについて

    <textarea>に入力された値をPOSTで渡し、ポスグレに書き込み、それをHTML上で表示する処理をしているのですが。 textareaで改行を入力した場合に、 DB内に改行が登録されません。 例: *textareaのwrapはsoftに設定してあります。 あいうえおかきくけこ さしすせそ と入力すると。 DBには 「あいうえおかきくけこ さしすせそ」 と登録され 表示では「あいうえおかきくけこさしすせそ」と表示されます。 ソースでみると 「あいうえおかきくけこ さしすせそ」と表示されています。 改行コードの置換がされていないのだと思い INSERT前に s/\r\n/<BR>/g; s/\r/<BR>/g; s/\n/<BR>/g; を使い置換をすると DBには何も登録されません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 改行コードを保存できない。

    <textarea wrap="hard" name="sentence" rows="3" cols="30"></textarea> このフォームで、入力したデータは、 PostgreSQLのテーブルに保存されるように構成しました。 フィールドは、"text"型です。 いざそれを、phpでHTMLに呼び出すと、改行文字は無視されます。 実際に、データベースを開くと、その値はこのようになっていました。 "ああああ・・あああ・・・・ああ" 改行コードはどうやら、"・"2個を改行1つと扱って保存しているようでした。 phpで、・・を含む値をHTML呼び出す時、 ・・を<BR>として呼び出して、改行してしまう技はないでしょうか?

  • 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 $_; }

    • ベストアンサー
    • CGI
  • textarea内での改行の条件

    投稿フォームなどのtextarea内で、改行の条件を決めたいと思っています。 具体的には、「。、・)」や「.,-)」などが文章末尾にある場合に限り改行を許可するといった感じです。 上記の許可文字以外でEnterキーを押して改行しても、実際には改行されずに処理が行われる方法が希望です。 textarea内の値が$mesの場合、 $kai = " 。..、??!!-ー-"; $mes =~ s/[^$kai]<br>//g; 上記のように置換をすると、$kaiに設定されている文字などで改行を行っても無効となり、$kai<br>ではOKという感じなんですが、改行が無効となる部分の文字が化けてしまいます。 何か最良な手法がございましたらご教授頂けますと幸いです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • フォームから入力された改行コードをbrにする方法

    掲示板を現在作成していて、投稿者が記入した改行が反映されないので、<textarea>から入力された改行コードを<br>タグに変換しようと思っています。 どなたかご存知の方、教えてください。

    • ベストアンサー
    • PHP
  • カンマ形式のテキストファイルの置換

    テキストファイルの変換に困っています. 1,2,3,4 5,6,7,8 というデータを 1 2 3 4 5 というように置換操作でカンマ→改行にしたいと 思っています. ・秀丸の場合 ,→\n(改行文字)でできます. でもメモ帳の場合は\nのようなエスケープシーケンス は使えません メモ帳で置換後の文字列を改行にしたいのですが どのようにしたらいいでしょうか?教えてください メモ帳でだめならエクセルではできないでしょうか?

  • 掲示板で改行されない

    掲示板を作成中で、MYSQLにtextboxから入力して、呼び出して表示する事はできたのですが、入力時の改行が 全く無視されて改行なしで表示されます。 入力した時と同じように改行されて表示させるには どうしたらいいのでしょうか?

    • ベストアンサー
    • PHP
  • 改行ができません

    タイトルの通りなのですが、ここで質問内容を入力する際、何故か改行キーを押しても文章の改行ができず、下の困り度の設定の所にカーソルが行ってしまいます。エクセルやワードを使ってる時には普通に改行キーで改行できるのに、何故なんでしょうか?使っているPCはvaioのタイプNで、windowsのvistaです。

  • メールのテキストで多く改行が入ってしまう?

    現在メール送信のフォームを作っているのですが、 \r\nの扱いで困ったので書き込みしました。 <textarea>で取得したテキストを メールに出力するようにしていたのですが、 <入力したデータ> てすとです てすとです <メールで出力されたデータ> てすとです てすとです というようになってしまいます。 [\n\r]悪いのかと思い、\nに置換してみたのですが 同じような現象になってしまいました。 \nを取り除くような処理にすると二重改行をはされません。 \rだけ残すって言うのはちょっとまずいですよね・・・。 一体どうすれば良いのでしょうか?

    • ベストアンサー
    • CGI

専門家に質問してみよう