PHPのhtmlspecialcharsを使いつつ改行する
改行サンプル1
改行サンプル2
改行サンプル3
改行サンプル2
改行サンプル3
上の表示は、下のコードによって表示されている
改行サンプル1<br>改行サンプル2<br>改行サンプル3<br>
これが掲示板とかのコメント表示だとしたら、「クロスサイトスクリプティング対策」のために「htmlspecialchars」関数でHTML タグを使えなくしてから、echoとかで出力した方がいいんだ。
でも、下のように「htmlspecialchars」関数を使うと、改行が<br>と表示されてしまうの。 <br>だけは改行として扱ってほしいよね。
<?php
$kaigyou_com = '改行サンプル1<br>改行サンプル2<br>改行サンプル3<br>';
$kaigyou_com = htmlspecialchars($kaigyou_com, ENT_QUOTES, 'UTF-8'); echo $kaigyou_com
?>
【実行結果】
改行サンプル1<br>改行サンプル2<br>改行サンプル3<br>
だからね、「str_replace」関数で、一旦、<br>を「改行するよ」の文字列に置き換えてから、「htmlspecialchars」関数を通して。。。 その後に、また「str_replace」関数で、「改行するよ」を<br>に戻すんだ。
<?php
$kaigyou_com = '改行サンプル1<br>改行サンプル2<br>改行サンプル3<br>';
$kaigyou_com = str_replace('<br>','改行するよ', $kaigyou_com);
$kaigyou_com = htmlspecialchars($kaigyou_com, ENT_QUOTES, 'UTF-8');
$kaigyou_com = str_replace('改行するよ','<br>', $kaigyou_com);
echo $kaigyou_com
?>
【実行結果】
改行サンプル1
改行サンプル2
改行サンプル3
改行サンプル2
改行サンプル3
また、「\n」や「\r」の改行コードにも対応する場合は、nl2br関数で事前に全ての改行コードを一旦「<br>」に変えてから、さっきのことをやればいいんだ。
<?php
$kaigyou_com = '改行サンプル1<br>改行サンプル2<br>改行サンプル3<br>'; $kaigyou_com = nl2br($kaigyou_com);
$kaigyou_com = str_replace('<br>','改行するよ', $kaigyou_com);
$kaigyou_com = htmlspecialchars($kaigyou_com, ENT_QUOTES, 'UTF-8');
$kaigyou_com = str_replace('改行するよ','<br>', $kaigyou_com);
echo $kaigyou_com
?>
今日のいーちゃん、なんか頭よさそうに見えるね
お名前