关于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实体
转换规则
'&' (&符号)   变为 '&amp;' 
'"' (双引号)   变为 '&quot;'   
''' (单引号)   变为 '&#039;' 
'<' (小于号)  变为 '&lt;' 
'>' (大于号)  变为 '&gt;' 

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;
}

 

posted @ 2013-04-14 21:54  飞凡123  阅读(389)  评论(0编辑  收藏  举报