为了区分数据是否已转义,我还是建议定义一个命名机制。对于输出到客户机的转义数据,我使用$html数组进行存储,该数据首先初始化成一个空数组,对所有已过滤和已转义数据进行保存。
4 |
$html [ 'username' ] = htmlentities( $clean [ 'username' ], ENT_QUOTES, 'UTF-8' ); |
5 |
echo "<p>Welcome back, {$html['username']}.</p>" ; |
htmlspecialchars( )函数与htmlentities( )函数基本相同,它们的参数定义完全相同,只不过是htmlentities( )的转义更为彻底。
通过$html['username']把username输出到客户端,你就可以确保其中的特殊字符不会被浏览器所错误解释。如果 username只包含字母和数字的话,实际上转义是没有必要的,但是这体现了深度防范的原则。转义任何的输出是一个非常好的习惯,它可以戏剧性地提高你 的软件的安全性。
另外一个常见的输出目标是数据库。如果可能的话,你需要对SQL语句中的数据使用PHP内建函数进行转义。对于MySQL用户,最好的转义函数是 mysql_real_escape_string( )。如果你使用的数据库没有PHP内建转义函数可用的话,addslashes( )是最后的选择。
下面的例子说明了对于MySQL数据库的正确的转义技巧:
04 |
$mysql [ 'username' ] = mysql_real_escape_string( $clean [ 'username' ]); |
07 |
WHERE username = '{$mysql[' username ']}' "; |
08 |
$result = mysql_query( $sql ); |