• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:保存データの¥nを<br />に変換)

データ保存時に改行を変換する方法とは?

このQ&Aのポイント
  • 保存データの改行を<br />に変換する方法について
  • 以前のhtmlspecialchars使用方法の問題点と修正方法
  • 出力時に改行を<br />として表示する方法について

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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したい。」が間違い。

infinity38
質問者

お礼

ご回答ありがとうございます。 なるほど!絶対に現れない文字+file_get_contentsを使ったやり方、 すごく勉強になりました。 1の方法でやっていきたいと思います。 わかりやすく教えていただきありがとうございました。

その他の回答 (4)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

>データの一番最後についている\nも >nl2brにより改行されてしまいませんかね?? 最後の改行(テキストファイルに保存したときに付加したもの)は最初に(読み込んだ直後に)rtirmで取り除くべきです。 というか「テキストファイルに保存」という時点で、データ中の(データとしての)改行コードなのかデータ区切りの改行なのかは判別出来ませんので、一緒くたに<br />にしてしまうしかないのでは? #データベースに保存するなら判別可能ですが・・・ つまり「改行コードを含むデータ」をひとつのテキストファイルに複数保存する・・・という時点で設計がマズイです。

infinity38
質問者

お礼

ご回答ありがとうございます。 notnotさんから教わった設計でやっていきたいと思います。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

保存は無加工で行い、 出力時に、htmlspecialchars() してから、nl2br() してください。

infinity38
質問者

お礼

ご回答ありがとうございます。 その場合、 -----------data.txt------------------------------ こんにちは、山田です。\n元気ですか?\n こんばんは、鈴木です。\n元気です。\n ------------------------------------------ データの一番最後についている\nも nl2brにより改行されてしまいませんかね??

  • ma-tsu
  • ベストアンサー率32% (190/593)
回答No.2

ではhtmlspecialcharsをかけるまえにstr_replaceで<br />を別な文字列に置き換えてその文字列をhtmlspecialchars後にまた置換しては?

infinity38
質問者

お礼

ご回答ありがとうございます。 なるほど、そういうやり方もあるんですね。

  • ma-tsu
  • ベストアンサー率32% (190/593)
回答No.1

htmlspecialcharsで<>を&lt;&gt;に変換してしまっているからです。 htmlspecialcharsを外してそのまま出力してみてください。

infinity38
質問者

お礼

ご回答ありがとうございます。 しかしそうしますと、危険なコードを投稿された場合、まずくないでしょうか?

関連するQ&A