我有一个字串中的转义撇号。我试图使用strpos来确定带转义撇号的单词是否在字符串中。不幸的是,它每次都会重复错误。我做错了什么?我试过了,在strpos中,有一个逃逸的斜杠,两个逃逸的斜杠,一直到5,但是每次都是假的。
$text = "example\'s";
$text = " ".$text." ";
if (strpos($text, " example\\\\\'s ")) {
echo "true.";
}
else {
echo "false.";
}发布于 2015-08-27 18:13:39
这里有两个问题--第一个是字符串的转义,第二个是基于strpos函数返回的逻辑。
第一个问题是,您不需要将搜索输入转义到strpos --它不是正则表达式!
第二个问题是,您的(未转义的)搜索字符串将匹配在零位置,PHP也将其解释为虚值。
PHP状态:
警告此函数可能返回布尔值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: 布尔假本身 整数0(零) 浮点数0.0 (零) 空字符串和字符串"0“。 零元素数组 一个成员变量为零的对象(仅限于PHP 4) 特殊类型NULL (包括未设置变量) 由空标记创建的SimpleXML对象 所有其他值都被认为是真(包括任何资源)。 警告:-1被认为是正确的,就像任何其他非零(无论是负数还是正数)!
来自:http://php.net/manual/en/language.types.boolean.php
https://stackoverflow.com/questions/32256497
复制相似问题