習慣上,在需要使用 <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 字符實體: