※ ChatGPTを利用し、要約された質問です(原文:エスケープしたくない、けど、したいのもある)
PHPでテキストファイルを読み込み、タグをエスケープする方法について
このQ&Aのポイント
PHPで作成したスクリプトでテキストファイルを読み込み、HTMLタグが含まれている場合にタグをエスケープする方法について説明します。
現在のスクリプトでは、テキストデータをそのまま出力するため、HTMLタグが有効になっています。
しかし、テキストデータにHTMLタグが含まれている場合は、ブラウザがタグとして認識し、表示されない問題があります。タグをエスケープする方法として、htmlspecialchars関数を使用することができます。
とあるテキストデータ(.txt)を読み込み、それを表示するスクリプトをPHPで作りました。
その際、もしテキストデータにHTMLタグが入っている場合、そのまま出力させて、タグが有効になるようにしています。
(というかテキストを何も処理せずそのまま出力するだけ)
(セキュリティ的には、テキストデータは信頼できる自サイトの同一ディレクトリに置いてあるものからしか読み込ませないようになっています)
しかし、今度は逆に、もしそのテキストデータに「<hoge>」などの文字がふくまれていた場合、ブラウザはそれをタグと認識し、見えない表示になります。
本当は見えるようにそこは「<hoge>」と出力してほしいわけです。
かと言って、
echo htmlspecialchars($txt, ENT_QUOTES|ENT_HTML5, "UTF-8");
などエスケープして出力すると、今度はHTMLタグとして出力させたい「<br>」なども「<br>」として出力されてしまい都合が悪いです..
ようは、
「こんにちは<hoge><br>ほげ」
という文字列のテキストを、
「こんにちは<hoge><br>ほげ」
と出力してほしい..
もちろんテキストは「hoge」であるとは限りません。
何かよい解決方法はないでしょうか?
ご教示頂けましたら幸いです。
お礼
ありがとうございました。地道にエスケープします..