使用strpos在字符串中查找带有转义撇号的单词

时间:2015-08-27 18:04:10

标签: php escaping strpos apostrophe

我在一个字符串中有一个带有转义撇号的单词。我正在尝试使用strpos来确定带有转义撇号的单词是否在字符串中。不幸的是,它每次都是错误的。我究竟做错了什么?在strpos中,我尝试过1次逃逸斜线,2次逃跑斜线,一直到5次,但每次都是虚假的。

$text = "example\'s";
$text = " ".$text." ";

if (strpos($text, " example\\\\\'s ")) {
echo "true.";
}

else {
echo "false.";
}

1 个答案:

答案 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,与任何其他非零(无论是否定为正数)一样!

来自:http://php.net/manual/en/language.types.boolean.php