字符串中有一个带转义撇号的单词。我试图使用strpos来确定带有转义撇号的单词是否在字符串中。不幸的是,每次都是假的。我做错了什么?我试过了,在strpos中,1个转义斜杠,2个转义斜杠,一直到5,但每次都返回false。
$text = "example''s";
$text = " ".$text." ";
if (strpos($text, " example''''''s ")) {
echo "true.";
}
else {
echo "false.";
}
这里有两个问题-第一个是字符串的转义,第二个是基于strpos
函数返回的逻辑。
第一个问题是,您不需要将搜索输入转义到strpos
-它不是一个正则表达式函数!
第二个问题是(未转义的)搜索字符串将匹配位置0,PHP也将其解释为假值。
这里的PHP strpos文档声明:
警告这个函数可以返回布尔值FALSE,但也可以返回非布尔值FALSE。有关更多信息,请阅读布尔值部分。使用===操作符测试此函数的返回值。
使用下面的代码,应该可以正常工作:
$text = "example''s";
$text = " ".$text." ";
if (strpos($text, " example''s ") === false) {
echo "false.";
} else {
echo "true.";
}
===
操作符是这里的关键-它表示相等的值和类型,因此它可以防止PHP解释器将零返回值视为等于false,否则它会这样做。
参见PHP的比较运算符参考:http://php.net/manual/en/language.operators.comparison.php
Edit:关于PHP认为为假的值的进一步信息:-
当转换为布尔值时,以下值被认为是FALSE:
boolean FALSE本身
0 (0)
浮点数0.0 (0)
为空字符串,以及字符串"0"
包含零元素的数组
0成员变量的对象(仅限PHP 4)
特殊类型NULL(包括未设置的变量)
从空标签创建的SimpleXML对象
所有其他值都被认为是TRUE(包括任何资源)。
警告:-1被认为是TRUE,就像任何其他非零(无论是正数还是负数)数一样!
从:http://php.net/manual/en/language.types.boolean.php