- ベストアンサー
データ保存時に改行を変換する方法とは?
- 保存データの改行を<br />に変換する方法について
- 以前のhtmlspecialchars使用方法の問題点と修正方法
- 出力時に改行を<br />として表示する方法について
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No3です。 おっと、アペンドモードでファイルに書いているのを見落としてました。複数のデータを追記ですね。 No4の方がお書きの通り、データ中の改行と、データの区切りの改行の区別が付かないので、No3に書いた方法はダメです。 案1:データの区切りを、データ中に絶対に現れない文字にする。例えば \0。 この場合、$f=file("data.txt"); のところを、$f=explode("\0",file_get_contents("data.txt")); にする。 案2: データ中の \n を、データ中に絶対に現れない制御文字(例えば\0)にして、\n 区切りで保存し、 出力時に、htmlspecialchars() してから、\n を <br /> に置換。 特に理由が無ければ、案1ですかね。 「保存時のデータ区切りを\nしたい。そうすると元々あった\nと区別できないので、保存前に\nを<br />にする。でもそうすると、もともとあった<br />と区別付かないので、さらにその前にhtmlspecialcharsする」 というのはあまりにも行き当たりばったりです。 最初の「保存時のデータ区切りを\nしたい。」が間違い。
その他の回答 (4)
- shimix
- ベストアンサー率54% (865/1590)
>データの一番最後についている\nも >nl2brにより改行されてしまいませんかね?? 最後の改行(テキストファイルに保存したときに付加したもの)は最初に(読み込んだ直後に)rtirmで取り除くべきです。 というか「テキストファイルに保存」という時点で、データ中の(データとしての)改行コードなのかデータ区切りの改行なのかは判別出来ませんので、一緒くたに<br />にしてしまうしかないのでは? #データベースに保存するなら判別可能ですが・・・ つまり「改行コードを含むデータ」をひとつのテキストファイルに複数保存する・・・という時点で設計がマズイです。
お礼
ご回答ありがとうございます。 notnotさんから教わった設計でやっていきたいと思います。
- notnot
- ベストアンサー率47% (4900/10358)
保存は無加工で行い、 出力時に、htmlspecialchars() してから、nl2br() してください。
お礼
ご回答ありがとうございます。 その場合、 -----------data.txt------------------------------ こんにちは、山田です。\n元気ですか?\n こんばんは、鈴木です。\n元気です。\n ------------------------------------------ データの一番最後についている\nも nl2brにより改行されてしまいませんかね??
- ma-tsu
- ベストアンサー率32% (190/593)
ではhtmlspecialcharsをかけるまえにstr_replaceで<br />を別な文字列に置き換えてその文字列をhtmlspecialchars後にまた置換しては?
お礼
ご回答ありがとうございます。 なるほど、そういうやり方もあるんですね。
- ma-tsu
- ベストアンサー率32% (190/593)
htmlspecialcharsで<>を<>に変換してしまっているからです。 htmlspecialcharsを外してそのまま出力してみてください。
お礼
ご回答ありがとうございます。 しかしそうしますと、危険なコードを投稿された場合、まずくないでしょうか?
お礼
ご回答ありがとうございます。 なるほど!絶対に現れない文字+file_get_contentsを使ったやり方、 すごく勉強になりました。 1の方法でやっていきたいと思います。 わかりやすく教えていただきありがとうございました。