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

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

 

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

转载于:https://www.cnblogs.com/gameboy90/archive/2012/07/02/2573132.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值