• str_replace() 中的参数 类型、反反斜杠


    上代码:

    <?php
    function cleanQueryWord($word)
    {
    $src = array('+', '-', '&', '|', '!', '(', ')', '{', '}', '[', ']', '^', '"', '~', '*', '?', ':');
    $dst = array('\+','\-','\&','\|','\!','\(','\)','\{','\}','\[','\]','\^','\"','\~','\*','\?','\:');
    $word = str_replace($src, $dst, $word);
    $word = str_replace('\\\\', '\\', $word);
    return $word;
    }
    var_dump(cleanQueryWord('!!-sb gameboy90!!@'));
    ?>

    str_replace中的前两个参数,$search和$replace的类型,都是mixed,而不是string!So,在设置替换规则时,你要注意。

    Description

    mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

    This function returns a string or an array with all occurrences of search in subject replaced with the given replace value.

     

    上面代码中的  $word = str_replace($src, $dst, $word);

    如果我们这里设置$word='!!-sb gameboy90!!@';

    运行之后出来的结果是: string(28) "\\!\\!\\-sb gameboy90\\!\\!@"

    这里,犹如三国杀里的锦囊“无懈可击”一样,它是可以被反无懈的,但是 \\\\ 和 \\ 的效果和反无懈可击又不是特别一样,\【\】\【\】这里用【】包起来的是被注释的,它的意思是在向编译器解释说,我(\【\】)是一个普通的符号,不想注释别人(其实可以理解为这张无懈可击我是当做普通的一张牌打出,并不是使用它的锦囊效果!);所以\\\\实际上就是两个普通的符号(\\)。

     

    至此,不是特别迷惑了吧??!!

  • 相关阅读:
    java基础语法
    MySQL5.7常用命令
    wireshark抓包分析---TCP/IP协议
    MySQL安全管理
    MySQL触发器
    MySQL存储过程和游标
    mysql实现远程登录
    Java中遍历Map对象的4种方法
    SSM-CRUD
    SSM整合-配置文件
  • 原文地址:https://www.cnblogs.com/gameboy90/p/2573132.html
Copyright © 2020-2023  润新知