通常、編集可能なコンテンツを表示するために <input type="text" />
または<textarea></textarea>
を使用する場合、その中の HTML エンティティをエスケープします。
<input type="text" value="<?php echo htmlspecialchars($strText); ?>" />
<textarea><?php echo htmlspecialchars($strLongText); ?></textarea>
前者については、属性値として出力されるため、エスケープする必要があります。
後者については、以下のコードを例にとると、両方のテキストボックスはブラウザで正しくレンダリングされますが、エスケープしない場合、<script>alert("aaaa");</script>
の前に </textarea>
を挿入すると、JS コードが実行されます。
したがって、結論として、エスケープした形式の使用を推奨します。
<!-- 未エスケープ -->
<textarea name="text1" id="text1" cols="35" rows="10">
<b>3333</b>
---
<script>alert("aaaa");</script>
</textarea>
<!-- エスケープした形式 -->
<textarea name="text2" id="text2" cols="35" rows="10">
<b>3333</b>
---
<script>alert("aaa");</script>
</textarea>
HTML 文字エンティティ: