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\\!\\!@"

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

 

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

posted @ 2012-07-02 14:38  gameboy90  阅读(825)  评论(0编辑  收藏  举报