• ベストアンサー

改行文字保存時のゴミ

 現在、フォームからのデータ入力などに関して勉強しているのですが、<textarea>からデータを入力すると、1バイトの改行文字が、改行ごとにくっついてきます。  改行自体はされるんですが、その余計なものが付いてくるのが困っています。何かしらのスクリプトをダウンロードしたときなども、時々改行部分が半角の■に変わってまして、つまり改行されずにごっちゃになって表示されてしまいます(別の方法で置換処理できるので自分はどーでもいいんですが)。  他のパソコンから同じCGIをアップロード、実行してみると、以外にもそういった影響はありませんでした。何となく、文字コードが機種とか環境などによって違ってるせいかな、とは感じているのですが、対処法が分かりません。  スクリプトにどういった手を加えれば、これが出ないようにできるのでしょうか?どうかご教授をお願いします。

  • CGI
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • blank_out
  • ベストアンサー率37% (10/27)
回答No.3

UNIX上に改行コードLFで置いていて、Windows系のOSにFTPするときに ASCIIモードで転送すれば改行コードはLF->CR+LFに変換されます。 逆向きも同様です。 Perlで置換したいならファイルをオープンした後binmodeを指定すれば CR:\r LF:\n で置換出来ます。 s/\n/\r\n/ binmodeを指定しないと、\n自体がプラットフォームに合せて勝手に判 断してしまうため、この手の置換は出来ません。 こんな感じで如何でしょうか?

Yuya_Tachibana
質問者

お礼

 回答ありがとうございます。仰るとおりにしてみたら、見事にできるようになりました。just like magicです(笑)。  UNIXではCRが余計なせいでゴミが出ていたわけですから、CRを削除してみたらうまくできました。つまり自分がやりたいと思ったときには、既にwindows上CR+LF→UNIX上LFとなっていたんですね。それでUNIX上でのCRが邪魔でゴミが残っていた、という状況だったようです。  とても助かりました。本当にありがとう御座いました。またなにかありましたら、その時はまた、ご教授をお願いします。

その他の回答 (2)

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.2

スクリプトに於いて。。 データを読み込み,希望の形式に変換してから保存する。 これだけでは?

noname#9414
noname#9414
回答No.1

改行コードが違うからですね。 通常Windowsでは改行がCR+LFとなっていて UNIXではLFのみです。従って、改行するたびに CRというごみが入るのです。 そこら辺は置換作業で何とかなりますよ。 #ついでに、CGIをやるなら「メモ帳」はやめて #WZEditorなどの改行コード、文字コードを #指定できるものにしましょう。 ではでは☆

Yuya_Tachibana
質問者

補足

 改行文字が入ったデータファイルが作成される場合、それはUNIXサーバ上でできるものだから問題ない(ゴミが入らない)としても、それをwindowsでダウンロードしようとすると、改行コードのCRが足らないせいで改行されずまとまってしまい、改行部分に半角の■ができてしまうのですね。  それの逆をする、つまりwindows上で改行したデータファイルをアップすると、CR部である半角■と改行になってしまう、ということでよろしいのでしょうか?  そのため、それを完全に回避する場合にはUNIXと同じ環境、つまりwindows上でも改行文字をLFのみで指定できるテキストエディタが必要なわけですね(どこかで理解のし間違いがあったら訂正をお願いします)。  でも・・・WZEditorって、高過ぎなんですけど・・・。他にいい方法はありませんか?  置換で何とかなると仰いましたが、置換でLFをCR+LFにするようなことができるんでしょうか?可能でしたら、是非その方法を教えて下さい(そういうのって本にのってませんね)。  よろしくお願いします。

関連するQ&A

  • textareでの改行

    ホームページ上のtextareaで入力してもらった情報を取得するCGI(perl)スクリプトを書いています。流れとしては,フォーム上で入力した情報をCGIで取得→確認画面を表示→問題無ければメールフォームとして送信,となっています。 このスクリプト上で問題となっているのが,textareaでは自動的に改行処理(wrap=softと同じ?xhtmlで書いているので,wrap属性は指定していません。)するときに入力される改行コードと,入力者が意図的に入力する改行コードを判別出来ないということです。自動的に挿入される\n(0x0A)を削除しようとスクリプト上で, $text =~s/\r\n/\n/g; $text =~s/\r/\n/g; $text =~s/\n//g; と入れたところ,全ての改行コードが変換処理されてしまい,入力者が意図的に入れた改行コードまで処理されてしまいます。 スクリプト上,もしくはxhtmlと組み合わせて,自動的に挿入される改行コードだけを消去して,意図的に入力した改行コードだけを残す処理は出来ないものでしょうか? phpなどを使うと出来るようですが,ある程度perlのcgiで作成してしまったので,このままで出来ればと思っています。よろしくお願いします。

  • 改行コードを保存できない。

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

  • 改行コードが半角スペースになってしまいます

    もしかしたらカテゴリはphpかも知れません。 よろしくお願いします。 phpとMySQLでWEBアプリを作っています。html上のtextareaフォームに入力した文字列を、phpを使ってMySQLにINSERTします。この文字列には改行(CRLF)も含まれます。 それをSELECTで参照し表示させると、改行が半角スペースに変換されてしまいます。 phpMyAdminで見てみるとちゃんと改行が入っています。 つまり、格納の段階ではちゃんと改行コードが入っているんですが、取り出すときに変換されてしまうようです。 この場合、どのように対処すればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • TEXTAREAで改行するとついてくるゴミコード

    自分で作成したCGIで送信されてきたフォームデータを 取得し、テキストファイルに出力するような処理をやってまして、 その送信されるデータにはTEXTAREAで入力されたデータもあります。 CGIの処理後に出力されたファイルをテキストエディタで開こうしたら、 テキストエディタでオープン不正であるようなメッセージが表示されました。 自分でもその原因についてバイナリエディタで調べたところ、 TEXTAREAで改行されたところに不正なゴミコードが混ざっているようでした。 改行コードは16進数でいうと「0D0A」のはずですが、バイナリファイルで みたところ改行部分が「0D0D0A」となっているようで、どうやら「0D」の余計な コードがテキストエディタで開いた時、エラーを発生させている原因となってるようです。 CGIの処理内でこの「0D」コードを削除する処理をいれるのもいいんですが、 なにか簡単にこの「0D」というゴミコードを取り除きたいのですが、 ナニかいい方法ないでしょうか?

    • ベストアンサー
    • CGI
  • 改行コード?

    <TEXTAREA name="moji" cols="80" rows="6"></TEXTAREA> で文字を入力したときmojiにはいっている改行コードは なにですか?

  • UNIXでの改行コードの置換

    2バイト改行コードが入ってるデータを1バイト改行に置換してから、 コボルにて入力ファイルとして扱いたいのですが、 UNIXのコマンドで、置換することは可能でしょうか? ちなみにファイルは可変長です。 どなたかご存知の方がいられましたら、ご教授頂けます様よろしくお願い致します。

  • Shift-JISの文字と改行コードについて

    TEXTAREAで入力した値をDBに対して、 .htmlspecialchars(mysql_real_escape_string(stripslashes($_POST["in3"])),ENT_QUOTES) の記述で保存した時、 文字化けコード(「ソ」「表」)が入っている場合に改行を行うと、 改行部に「\r」が文字として保存されてしまいます。 また、文字化けコードがない場合には「\r」は表示されず、 文字化けコードと改行までの間に半角英数字が入っていると「\r」は表示されません。 このような状態になる理由や回避方法についてコメントいただきたく思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 改行が半角スペースに変わる

    phpのメールフォームからメールを送信するとtextareaの改行した箇所が 半角スペースになってしまいます。phpはUTF-8で改行コードはLFです。 送信前の確認画面までは改行された状態で見れるので送信時に改行が 消されてるのかと思うのですがいまいち原因がわからずです。。。 似たような質問が過去ログにもあったので参照しtextareaのnameがmsgなので nl2br($msg); を試してみたのですが改行にはなりませんでした。 どのようにしたら半角スペースではなく改行されるようになるでしょうか?

    • 締切済み
    • PHP
  • 文章の改行の取り扱いについて

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

    • ベストアンサー
    • CGI
  • 改行コード変換

    先に「chompの使い方」で質問したものです。 文字コードを調べたところ、改行が「^M」で表示されていました。 テキスト文書ファイルもCGIプログラムも文字コードはEUCにしてありますし、改行コードもLFにしているんですが、フォームで入力される改行コードはCR+LFになっているようです。 これはどうやって制御すれば(全ての改行をLFにする)よいのでしょうか? ご教示いただけるとうれしいです。よろしくお願いいたします。

    • ベストアンサー
    • CGI

専門家に質問してみよう