关于php的几个转义函数
一、get_magic_quotes_gpc()
检测get_magic_quotes_gpc 取得 PHP 环境变量 magic_quotes_gpc 的值
当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的转义字符。
默认情况下,PHP 指令 magic_quotes_gpc 为 on,可在配置文件php.ini中查看
它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。
<?php
echo get_magic_quotes_gpc(); // 0关闭 1打开
?>
二、addslashes()与stripslashes()
addslashes在字符是单引号(')、双引号(")、反斜线(\)与 NULL(NULL 字符)前加上反斜线。
例子:
$str = "Is your name O'reilly?";
// 输出:Is your name O\'reilly?
echo addslashes($str);
结论:不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),
因为这样会导致双层转义。所以要使用addslashes最后先判断是否打开了magic_quotes_gpc
stripslashes()
返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。
三、mysql_escape_string()与mysql_real_escape_string()
mysql_escape_string转义一个字符串安全用于 mysql_query
两者的区别是:
mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。
结论:推荐尽量使用 mysql_real_escape_string而不是mysql_escape_string
mysql_real_escape_string与addslashes的区别
addslashes是强加,mysql_real_escape_string是需要的时候才转义。
结论:执行mysql插入或更新语句前推荐使用mysql_real_escape_string()
四、htmlspecialchars、htmlentities、htmlspecialchars_decode
htmlspecialchars转换特殊字符为HTML实体
转换规则
'&' (&符号) 变为 '&'
'"' (双引号) 变为 '"'
''' (单引号) 变为 '''
'<' (小于号) 变为 '<'
'>' (大于号) 变为 '>'
htmlentities 却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。
一般情况使用htmlspecialchars就可以,实在要使用 htmlentities 时,要注意为第三个参数传递正确的编码。
在做用户注册或留言板的时候一定要进行转义,如果一个用户注册用户名的时候
输入的是<h1 style="color:red">mafei</h1>
不转义,读出来的数据就是mafei,导致页面显示错误(错位等)的
所以插入数据库的时候要htmlspecialchars一下,读取的时候要htmlspecialchars_decode
五、一个插入或更新数据时防止注入的函数
适用于向mysql插入或更新数据
function escapize($arr) {
if (is_array($arr))
{
foreach ($arr as $key => $value)
{
$arr[$key] = escapize($value); //这里采用了递归
}
}
if (is_string($arr))
{
$arr = htmlspecialchars(mysql_real_escape_string($arr));
}
return $arr;
}