首先说说函数名的一些规则,如果在str后面有i的,一般直大小写不敏感,有r的,一般指从尾部开始。两个同时出现,一般是r在前,i在后。
1.strpos($hayback, $needle, [$offset = 0])系列,寻找指定字符串的位置。
在$hayback中找到第一个出现$needle的位置。
$offset是指定从某个位置开始搜索(注意了,string是zero-base的)。
可以推断出以下几个函数的用途:
stripos:不区分大小写进行匹配。
strrpos:从尾部开始进行匹配。
strripos:从尾部开始进行匹配,并且不区分大小写。
以后的字符串函数,以此类推。
==============================================================
2.strtr($hayback, $from, $to),strtr($hayback, $array)对字符串进行翻译。
对$hayback所有找到的$from, 均翻译成$to.
如果需要翻译多个,可以传递数组到第二个参数。
数组形如:
$array = array(
'from_1' => 'to_1',
'from_2' => 'to_2'
)
这个函数没有不区分大小写的版本。。。
但它有几个要注意的地方:
1)对于第一种参数形式,可能会有不符合本意的情况出现:例如
echo strtr("I Love you", "Lo", "lO");
我们希望是 I lOve you
但是输出是 I lOve yOu
要想达到希望的结果,就要改成第二种形式,即echo strtr("I Love you",array("Lo" => "lO"));
2)还是针对第一中参数形式,第三个参数不能为空,当然可以为空格。
例如
echo strtr("I Love you", "Lo", "");
会输出I Love you 没有任何变化
但是
echo strtr("I Love you",array("Lo" => ""));
则会达到我们要的结果:I ve you
所以,用第一种形式的朋友们,要留心了。
3.strcmp,strcasecmp字符串比较(又是被人诟病的php命名方式,怎么看都觉得strcasecmp才是大小写敏感,怎么就不和别的函数一样用i,变成stricmp呢?命名方式混乱!!)
对两个字符串进行逐位比较,当该位相同时,才取下一位进行,直到不同才返回结果。
第一比第二小,则返回-1,大于则返回1,完全相同则返回0
值得注意的是,小写字母是比大写字母要大的,这点很多程序员可能会记混。
4.strstr($hayback, $needle, [$before = false])可以理解为字符串截取的一种方法
在$hayback中,找到第一个出现$needle的位置,返回从该位置到结尾的部分(当然拉,包含$needle本身,因为位置是$needle的第一个字符的偏移值)。
当$before为true,则返回从该位置到开头的部分(不包含$needle本身,原因你懂的)。
该系列其它函数名自己推敲。不过呢,没有逆向的函数。
5.strspn($hayback, $mask, [$start], [$length])和strcspn($hayback, $mask, [$start], [$length]),白名单和黑名单。
strspn 就是在$hayback中,返回第一个在$mask以外的字符的位置
strspn 就是在$hayback中,返回第一个在$mask内出现的字符的位置。
$start为正数时, 从$start所指的位置开始搜索,结果是以$start为0开始计算,负数则是从strlen($hayback) + $start的位置开始
没有逆序版本,没有不区分大小写版本
6.str_replace( mixed $search , mixed $replace , mixed $subject [, int &$count ])字符串替换
把$subject中的$search替换成$replace. $count返回成功替换的个数
这个最是合用来做敏感词替换了。。。但是速度会是strtr的1/4
有不区分大小写的版本 str_ireplace
脏词替换例子:
$dirty_word = array('脏话', '悲剧');//为了文明起见,大家知道这是脏话就好
$sentence = '我脏话你!你个悲剧!';
echo str_replace($dirty_word, '敏感词', $sentence);//我敏感词你!你个敏感词!
这里有个问题要注意,匹配时不是贪婪的,所以
$dirty_word = array('脏话', '脏话2' );//为了文明起见,大家知道这是脏话就好
$sentence = '我脏话你!你个脏话2!';
echo str_replace($dirty_word, '敏感词', $sentence);//我敏感词你!你个敏感词2!
会依然匹配数组中的第一个,所以如果有些词之间,一个词是另一个词的前半部分,则应该把长的放前面,短的放后面才能得到希望的结果
7.substr_replace (mixed $string , string $replacement , int $start [, int $length ])
将$start起,长度为$length的部分替换成$replacement,注意,$start所指的字符也会被替换。
8.substr (mixed $string ,int $start [, int $length ])
就是截取从$start开始,长度为$length的部分