【案件】オンラインチケット発行ちょいプログラム

簡単なプログラムだし、と、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様