• 关于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;
    }

     

  • 相关阅读:
    IIS应用程序池标识(程序池账户)ApplicationPoolIdentify
    笔记二 sql 基础知识
    笔记三 索引讲解
    SqlParameter使用参数错误,提示请求超时或则查询速度过慢
    SVN 常见操作
    Excel 基本操作
    sql server row_number分页排序
    本地部署IIS
    sql中去掉字段的所有空格
    sql取逗号前后数据与批量修改某一字段某一值
  • 原文地址:https://www.cnblogs.com/mafeifan/p/3021088.html
Copyright © 2020-2023  润新知