- ベストアンサー
改行処理がうまくいきません
今現在、PHPで掲示板を運用しています。 PHP初心者です。 掲示板で訪問者のユーザーのコメントを以下のように処理しています。 $post_arr[$h] = htmlspecialchars($post_arr[$h]); $post_arr[$h] = str_replace("\r\n", "\r", $post_arr[$h]); $post_arr[$h] = str_replace("\r", "\n", $post_arr[$h]); $post_arr[$h] = str_replace("\n", "<br>", $post_arr[$h]); 改行→<br>変換を行っているのですが、ごくたまに(特定の訪問者)改行処理がされず困っています。 これをcsvでログを保存しているのですが、<br>処理をされずデータがずれてしまいます。 ログを調べるとその訪問者の方は、古いものをお使いなのかなと思いましたが、WIN XP,IE6でしたので訪問者側に問題ないと思うのですが。 初心者で大変恐縮ですが、ご返答よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
私も今ちょうど同じ様なことやってましたが、私が今やってるのは、最初にnl2brで改行記号<br />をいれ、 $buff=explode("<br />",$post_arr[$h]); として配列に一度格納し、for文を使って $buff2[$i]=rtrim($buff[$i]); として改行文字を全部消します。 再度implodeで文字列に戻す、という面倒くさいことをやっています。 ご参考まで。
その他の回答 (4)
- ttyp03
- ベストアンサー率28% (277/960)
#1です。 >ただ、nl2br改行文字の前にHTMLの改行指定文字を挿入するだけですよね!? >改行を消す関数ではないですよね。 あ~すみません。CSVで保存、ということをすっかり忘れてました。 bl2br はご指摘の通り <br /> を改行コードの前に挟むだけですね。 プログラム的には問題なさそうなので、実際に何のコードが送られてきているのかがわかると対処もできそうです。 作成されたCSVをダンプツールか何かで見てみることはできますか? そこまでやるのが面倒なら#3さんの方法が確実かもしれないです。
- hrm_mmm
- ベストアンサー率63% (292/459)
csvの項目区切り文字はなんでしょう? 区切り文字が含まれていた場合の変換処理をしていないために項目が切れているのでは?
- kosa
- ベストアンサー率25% (379/1464)
見る限り「str_replace」を使って正しく処理できていると思います。CSV出力時のミスではないでしょうか? 「htmlspecialchars」でエンコード処理していますが、これは意味はあるのでしょうか?
- ttyp03
- ベストアンサー率28% (277/960)
nl2br 関数を使ったらどうでしょう? $post_arr[$h] = htmlspecialchars($post_arr[$h]); $post_arr[$h] = nl2br($post_arr[$h]);
お礼
ttyp03さんありがとうございました。 ただ、nl2br改行文字の前にHTMLの改行指定文字を挿入するだけですよね!? 改行を消す関数ではないですよね。 今回は、改行が<br>にうまく変換できないのもそうなんですが、改行がうまく処理されないのです。 初心者ながら大変恐縮ですが、ご意見いただけたらなと思います。