htmlspecialchars関数で改行が反映されない件

自作サイトをPHPで制作した際に、躓いたが最終的には上手くいった箇所を、ブログに残したい。htmlspecialchars関数が思い通りに動いてくれないと感じている同胞の力になりたい。

f:id:Berrys:20220418071426p:plain

原因

そもそもhtmlのtextareaを使って、入力した文字列をデータベースに保存。後にそれを表示したかった。
改行がない文字列であれば、思い通りの出力が得られる。しかし、改行を含む文字列の場合、データベースには改行コードも含まれて保存されているが、それを表示する際に改行が表示されない。その代わりに、空白(半角スペース)が表示される。おかしい。

f:id:Berrys:20220418071359p:plain

解決方法

調べたところ、nl2br関数を使うと良いらしい。試してみたが、単にhtmlspecialchars関数に対して被せるだけでは、思い通りの出力は得られない。改行されるが、以下のように改行コードが含まれてしまう。これじゃない。
ccc<br />
ddd<br />
eee
試行錯誤の末、htmlspecialchars関数にnl2br関数を被せたものを、echoで出力させると思い通りの出力が得られることがわかった。私の場合は、以下の画像のように、PHPを組めば良かった。

f:id:Berrys:20220418071132p:plain

すると、以下のように表示される。

f:id:Berrys:20220418071320p:plain