- ベストアンサー
改行文字保存時のゴミ
現在、フォームからのデータ入力などに関して勉強しているのですが、<textarea>からデータを入力すると、1バイトの改行文字が、改行ごとにくっついてきます。 改行自体はされるんですが、その余計なものが付いてくるのが困っています。何かしらのスクリプトをダウンロードしたときなども、時々改行部分が半角の■に変わってまして、つまり改行されずにごっちゃになって表示されてしまいます(別の方法で置換処理できるので自分はどーでもいいんですが)。 他のパソコンから同じCGIをアップロード、実行してみると、以外にもそういった影響はありませんでした。何となく、文字コードが機種とか環境などによって違ってるせいかな、とは感じているのですが、対処法が分かりません。 スクリプトにどういった手を加えれば、これが出ないようにできるのでしょうか?どうかご教授をお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
UNIX上に改行コードLFで置いていて、Windows系のOSにFTPするときに ASCIIモードで転送すれば改行コードはLF->CR+LFに変換されます。 逆向きも同様です。 Perlで置換したいならファイルをオープンした後binmodeを指定すれば CR:\r LF:\n で置換出来ます。 s/\n/\r\n/ binmodeを指定しないと、\n自体がプラットフォームに合せて勝手に判 断してしまうため、この手の置換は出来ません。 こんな感じで如何でしょうか?
その他の回答 (2)
- onosuke
- ベストアンサー率67% (310/456)
スクリプトに於いて。。 データを読み込み,希望の形式に変換してから保存する。 これだけでは?
改行コードが違うからですね。 通常Windowsでは改行がCR+LFとなっていて UNIXではLFのみです。従って、改行するたびに CRというごみが入るのです。 そこら辺は置換作業で何とかなりますよ。 #ついでに、CGIをやるなら「メモ帳」はやめて #WZEditorなどの改行コード、文字コードを #指定できるものにしましょう。 ではでは☆
補足
改行文字が入ったデータファイルが作成される場合、それはUNIXサーバ上でできるものだから問題ない(ゴミが入らない)としても、それをwindowsでダウンロードしようとすると、改行コードのCRが足らないせいで改行されずまとまってしまい、改行部分に半角の■ができてしまうのですね。 それの逆をする、つまりwindows上で改行したデータファイルをアップすると、CR部である半角■と改行になってしまう、ということでよろしいのでしょうか? そのため、それを完全に回避する場合にはUNIXと同じ環境、つまりwindows上でも改行文字をLFのみで指定できるテキストエディタが必要なわけですね(どこかで理解のし間違いがあったら訂正をお願いします)。 でも・・・WZEditorって、高過ぎなんですけど・・・。他にいい方法はありませんか? 置換で何とかなると仰いましたが、置換でLFをCR+LFにするようなことができるんでしょうか?可能でしたら、是非その方法を教えて下さい(そういうのって本にのってませんね)。 よろしくお願いします。
お礼
回答ありがとうございます。仰るとおりにしてみたら、見事にできるようになりました。just like magicです(笑)。 UNIXではCRが余計なせいでゴミが出ていたわけですから、CRを削除してみたらうまくできました。つまり自分がやりたいと思ったときには、既にwindows上CR+LF→UNIX上LFとなっていたんですね。それでUNIX上でのCRが邪魔でゴミが残っていた、という状況だったようです。 とても助かりました。本当にありがとう御座いました。またなにかありましたら、その時はまた、ご教授をお願いします。