我在一个字符串中有一个带有转义撇号的单词。我正在尝试使用strpos来确定带有转义撇号的单词是否在字符串中。不幸的是,它每次都是错误的。我究竟做错了什么?在strpos中,我尝试过1次逃逸斜线,2次逃跑斜线,一直到5次,但每次都是虚假的。
$text = "example\'s";
$text = " ".$text." ";
if (strpos($text, " example\\\\\'s ")) {
echo "true.";
}
else {
echo "false.";
}
答案 0 :(得分:3)
这里有两个问题 - 第一个是你的字符串转义,第二个是基于strpos
函数返回的逻辑。
第一个问题是您不需要将搜索输入转义为strpos
- 它不是正则表达式函数!
第二个问题是你的(非转义)搜索字符串在零位置匹配,PHP也将其解释为假值。
PHP strpos docs here状态:
警告 此函数可能返回布尔值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
编辑:有关PHP认为错误的值的更多信息: -
转换为布尔值时,以下值被视为FALSE:
布尔值FALSE本身
整数0(零)
浮点数0.0(零)
空字符串,字符串“0”
零元素的数组
一个零成员变量的对象(仅限PHP 4)
特殊类型NULL(包括未设置的变量)
从空标签创建的SimpleXML对象
其他每个值都被视为TRUE(包括任何资源)。
警告:-1被视为TRUE,与任何其他非零(无论是否定为正数)一样!