【案件】オンラインチケット発行ちょいプログラム
簡単なプログラムだし、と、datファイルをデータベースに使っていたら、改行コードの落とし穴。
改行コードを削除するにはどうしたらいいんだろう?
対象はブラウザより、textareaで入力した文字です。
1)とりあえず、function CR()を作って、改行コードを引っ張ってみた。それをstr_replaceを使って削除
ツꀀ/*改行コードを得る*/
ツꀀfunction CR(){
ツꀀツꀀツꀀ return ”
“;ツꀀツꀀツꀀ // この改行を詰めるべからず!
ツꀀ}$kaigyo = CR();
$text = str_replace($kaigyo,””,$text);
これでうまく行ったかのように思えた! しかし・・・・・・文末の改行コードが消えない。しかも、IEとFirefoxで改行コードが消えたり消えなかったり。
多分、あれだな。プログラムのスクリプトの改行コードとブラウザからきたデータの改行コードは違うということなんだろう。
2)文末の改行コードを削除する、chop関数を使う。
これでうまく行きました!
しかししばらくして、textareaの途中に改行コードをいれたら?ということになった。
そうすると見事に改行コードが消えない。
1)のstr_replaceを入れたら、なんとなくうまく行くようになった・・・・・・なんでだろう? でも、datファイルには文中に改行コードがいる。
3)改行コードってなんだ?
だいたいここからはじめるべきだったんですよね。
さて、datファイルを見る。
私が、function CRで取ってきた改行コードは、←(サクラエディタでの話ね)でLF。
textareaで入ったコードは、下左矢印でCRLF(Windowsの改行コード)。
1)と2)を実行して下左矢印の改行コードは下矢印のCRとなる。ふむ。そうだよね。LFを取るんだから。
んで、スクリプト内で改行コード、つまりデータの1番最後と認識されるのは、LFだと。
textareaで入ったままだと、CRLFだから、LFがデータの一番最後と認識されて変になるけど、CRだけなら認識されないので、それはテキストデータの改行コードではあっても、スクリプトが「行の一番最後」と認識する改行コードではないので、プログラム的には不具合が出ないって事か。
ってことは?
$text = str_replace(“\n”,””,$text);
$text = str_replace(“\r”,””,$text);
でいいのかー?
あれ、でも前にこれをしたときうまくいかなかったような?・・・・・・まぁ、いいか。
余談こんな記事も見つけました。PHP_EOL ?
PHP:定数で改行コードの違いを吸収(@sideB様)
コメントを残す