改行のみをbrタグに置換しその他のタグはサニタイズして表示する方法|PHP・SQL

今回は、SNS風のメッセージ掲示板を作成するにあたり苦戦しました「改行のみ<br>に置換」してメッセージ画面に表示する方法を忘備録として記述します。

やりたい事

  • textareaに改行ありのメッセージを入力
  • POST送信でDBへメッセージを格納
  • 格納したメッセージをSELECTで取得
  • 改行の位置はそのままに画面へ表示

textareaに入力された改行メッセージを、改行の位置をそのままにHTMLで表示したい場合、一番簡単な方法としてtextarea内の文字列のうち改行コード(\r , \n ,\r\n )を<br />に置換してDBへ格納→DBから取得し画面へ表示する方法を思いつきました。

しかし、textareaに入力される文字のうち、HTMLタグ等は不正コードの入力を防ぐために、コードではなく文字列として認識し出力してあげる必要があります(サニタイズ)。

したがってtextareaの入力時に改行コードを<br />に置換してDBに格納した場合、DBからメッセージを取得して画面に表示する際に、サニタイズにより<br>がそのまま文字列として表示されてしまい改行されないという問題がありました。

 

そこで今回はサニタイズ自体の機能に

①HTMLタグや「 ” 」「 ’ 」「 ` 」は文字列として表示

②改行(\r , \n ,\r\n )を<br />に置換

 

以上の2つを実装することで問題を解決しました。

目次

【完成イメージ】

図を見ていただけると分かりますが、<br>や<b>、<div>はサニタイズされているので文字としてそのまま表示。
一方改行のみは文字出力時に<br>に置換されて表示することに成功しています。

PHPコード(改行コードのみを<br>に置換するサニタイズ)

何度も使う可能性があったため関数にしました。

//サニタイズ(改行のみ<br>へ変換)

php


function sanitize_br($str){

return nl2br(htmlspecialchars($str, ENT_QUOTES, 'UTF-8'));

}

DBに格納したメッセージを上記のサニタイズをした後に、画面へ表示させると、改行コードのみを<br />に置換して画面に表示してくれます。

是非参考までに。

 

よかったらシェアしてね!

この記事を書いた人

30歳未経験でプログラマーへ転職を目指しているアトフジです。

プログラマー転職のために勉強したプログラミング知識、転職体験談を中心に情報発信しています。

現職:地方の金融機関
趣味:資産運用、読書、漫画

目次
閉じる