• ベストアンサー

改行文字保存時のゴミ

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

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

  • ベストアンサー
  • 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