在開發網頁時,因為安全性的問題,很多眉眉角角要注意!
URL列使用GET的參數傳送
urlencode:用urlencode來encode參數
PHP的值輸出到HTML上
htmlspecialchars:只encode特定HTML標籤符號(例如 <、>、&)
htmlentities:整個都做encode
<?php
$str='<a href="test.php">這是測試</a>';
//使用htmlentities的中文會出現亂碼
echo htmlentities($str);
//htmlspecialchars中文則是正常
echo htmlspecialchars($str);
//decode
echo html_entity_decode(htmlspecialchars($str));
?>
PHP的值輸出到Javascript上
PHP如果要輸出到Javascript上必須使用json_encode
<script type="text/javascript">
alert(<?= json_encode($str); ?>);
</script>
另外htmlentities和htmlspecialchars這兩個函式都有flags(細部條件判斷)可以選擇
<?php
$str="A 'quote' is <b>bold</b>";
//ENT_QUOTES 是針對單引號及雙引號encode
echo htmlentities($str, ENT_QUOTES);
echo htmlspecialchars($str, ENT_QUOTES);
//output A 'quote' is <b>bold</b>
?>
另外也可以選擇編碼
<?php
$str="A 'quote' is <b>bold</b>";
echo htmlentities($str, ENT_QUOTES, "UTF-8");
echo htmlspecialchars($str, ENT_QUOTES, "UTF-8");
?>
詳細flags以及編碼參數可以參考
htmlspecialchars PHP官網
htmlentities