php的转义字符

  1. php用什么方法可以将一个字符串中所有特殊字符转义输出?

    PHP5.5以后废弃了mysql扩展,可以转用mysqli或者pdo_mysql,所以mysql_real_escape_string函数,如果用mysqli的话可以用mysqli_real_escape_string代替

    不过建议用pdo_mysql,使用预处理语句提高安全性。  


  2. htmlspecialchars单双引号、大于和小于号等转化成HTML格式

  3. ;htmlentities所有字符都转成HTML格式;

  4. addslashes单双引号、反斜线及NULL加上反斜线转义

    • 如果你用了pdo就不用考虑数据库操作上注入等问题了,pdo自带的预处理可以有效的防治sql注入以及特殊字符的处理。

    • 如果你不用pdo那就得自己做好过滤处理了,如下推荐一个方法,仅供参考

    function isEscape($val, $isboor = false) {
        if (! get_magic_quotes_gpc ()) {
            $val = addslashes ( $val );
        }
        if ($isboor) {
            $val = strtr ( $val, array (
                    "%" => "\%",
                    "_" => "\_" 
            ) );
        }
        return $val;
    }
  5.  

  6. Mysql LIKE中特殊字符转义【附php实现函数】原文:http://m.blog.csdn.net/u010320127/article/details/8834637

  7. 提要:Mysql的LIKE的转义和普通字符串的不同。

    首先来看一个测试:

    mysql> SET @a='\\';SELECT @a,@a LIKE '\\\\';
    
    +----+----------------+
    | @a | @a LIKE '\\\\' |
    +----+----------------+
    | \  |              1 |
    +----+----------------+
    

    可以看出”\\\\“在LIKE中转义成”\“,LIKE的转义和平时用的字符串的转义还是有点不一样的。

    查了下官方文档,对于转义字符的解释:

    this is because the backslashes are stripped once by the parser and again when the pattern match is made,
    leaving a single backslash to be matched against. 

    mysql自己的parser转义一次,然后LIKE的pattern对前面的结果再转义一次。

    也就是说上例中的“\\\\”第一次转义成“\\”,第二次才是“\”。


    再来看个mysql字符转义的测试

    mysql> SELECT '\%','\_';
    +----+----+
    | \% | \_ |
    +----+----+
    | \% | \_ |
    +----+----+
    1 row in set

    呵呵,什么都转义(比如"\x" 转义成“x”,“\b"是回退字符),就是不转义”\%“和”\_“。而LIKE,都转义。恐怕MYSQL这样做的目的也是为了兼容LIKE吧。


    总结下,LIKE转义字符串时,一共两次,第一次不转义”\%“和”\_“,第二次全部转义。转义的特殊字符可以参见 http://dev.mysql.com/doc/refman/5.1/en/string-literals.html#character-escape-sequences

    LIKE的转义可以看成先替换“\\\\”为“\”,剩下的字符串用”\\“转义,剩下的字符串再用”\"转义。通常不遇见“\\”, LIKE的特殊解析是感觉不到的。

    下面附上PHP的LIKE转义代码:

     	//$pdo是PDO的实例,
     	//$str为搜索的字符串,如从表单中直接提交获取的
     	//先完成LIKE的转义
        	$str=strtr($str,array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\'));
        	//添加 %及_,组成完整搜索条件
        	$str='%'.$str.'%';
        	//mysql字符串的转义
        	$str=$pdo->quote($str); 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值