入门 - 搜索字符串 ¶
作者:KK
发表日期:2016.9.5
速读(主要是strpos函数) ¶
var_export([
"strpos('apple', 'a')" => strpos('apple', 'a'), //0
"strpos('apple', 'a')" => strpos('apple', 'p'), //1
"strpos('apple', 'a')" => strpos('apple', 'l'), //3
"strpos('apple', 'a')" => strpos('apple', 'x'), //false 找不到
"菜鸟误区1" => strpos('apple', 'a') == 0, //true
"正确姿势" => strpos('apple', 'a') === false, //false
]);
应用在逻辑判断上:
if(strpos('apple', 'a')){
//不成立,菜鸟误区1
echo '找到了';
}
if(strpos('apple', 'a') != false){
//不成立,菜鸟误区2
echo '找到了';
}
if(strpos('apple', 'a') !== false){
//成立!这才是正确姿势
echo '找到了';
}
正文 ¶
strpos函数 ¶
如果网站要判断用户有没有输入粗口,新手可能会这么做:
$_POST = ['name' => '今天天气真去死啊']; //模拟数据 if(strpos($_POST['name'], '死')){ echo '尊敬的用户请您别爆粗'; }else{ //... }
上面的逻辑可以判断出“死”字,但是如果字符串的值是下面这样就会进入else了
$_POST = ['name' => '死今天天气真去啊']; if(strpos($_POST['name'], '死')){ //if(0){ 相当于这样 //... }else{ echo '你真文明啊'; //会进入这里 }
因为
strpos返回的字符串出现位置是从0开始算的
,如果要搜索的字符串在第1个字符,那就返回0,第2个字符就是1。字符串其实就是数组,一个字符一个数组元素,第一个字符就是第0个元素这么理解吧所以上面的代码就其实变成了
if(0)
于是无法判断成立而进入了else我推荐使用
if(strpos($_POST['name'], '死') !== false)
这样来判断,但注意不要用!= false
:$_POST = ['name' => '死今天天气真去啊']; if(strpos($_POST['name'], '死') != false){ //if(0 != false){ 相当于这样 //if(false){ 于是成了这样 //... }else{ echo '你真文明啊'; //还是会进入这里 }
strstr函数 ¶
这个函数倒比较简单理解,就是把查找到的字符串以及后面的内容都返回来:
var_export([ "strstr('apple', 'p')" => strstr('apple', 'p'), //pple "strstr('apple', 'l')" => strstr('apple', 'l'), //le "strstr('apple', 'x')" => strstr('apple', 'x'), //空 ]);