使用stripos()的字符串中的双正斜杠将不匹配字符串,即使它存在?

时间:2010-06-24 22:00:41

标签: php string

今天我遇到了一个小问题,当我创建一个非常快速的脚本来扫描//todo:的用户指定目录中的行文件时...

所以我有这样的一句话:

if (stripos($data, '//todo:')) { //case-insensitive search ^^
  //deal with the data appropriately
}

在任何文件中都没有找到//todo:!这真是一个惊喜。我最终改变了这一行来删除双正斜杠(//)并且它有效。虽然现在这也会匹配不包含此字符串的注释的行,但可能不常见(并且它可能永远不会发生在我身上),但仍然可能。

我不知道为什么会这样,并且非常感谢你的解释。

2 个答案:

答案 0 :(得分:2)

也许这就是为什么?

<?php
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

// Note our use of ===.  Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
    echo "The string '$findme' was not found in the string '$mystring'";
} else {
    echo "The string '$findme' was found in the string '$mystring'";
    echo " and exists at position $pos";
}
?

也许它与需要的愚蠢===运算符有关b / c ==无法正常工作。

http://php.net/manual/en/function.strpos.php

答案 1 :(得分:0)

我刚刚运行此代码,它返回11(正如预期的那样)。

$data = "text test
//todo: fix me
text text";

echo stripos($data, '//todo:');

您确定$ data包含您认为它的功能吗?可能有一些字符编码问题或者可能有一些转义?