Двойная косая черта в строке с использованием stripos () не будет соответствовать строке, даже если она присутствует? - PullRequest
0 голосов
/ 25 июня 2010

Сегодня я столкнулся с небольшой проблемой, когда создавал действительно быстрый скрипт для сканирования файлов строк в указанной пользователем директории на //todo: ...

Итак, у меня была такая строка:

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

Это не нашло //todo: ни в одном из файлов! Это было довольно неожиданно. В конце концов я изменил эту строку, чтобы убрать двойную косую черту (//), и это сработало. Хотя теперь это также будет соответствовать строкам, не являющимся комментариями, которые содержат эту строку, возможно, это не обычное явление (и это, вероятно, никогда не случится со мной), но все же возможно.

Я понятия не имею, почему это произошло, и буду очень признателен за объяснение.

Ответы [ 2 ]

2 голосов
/ 25 июня 2010

Может быть, поэтому?

<?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

0 голосов
/ 25 июня 2010

Я только что запустил этот код, и он вернул 11 (как и ожидалось).

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

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

Вы уверены, что $ data содержит то, что вы думаете, что делает? Могут ли быть некоторые проблемы с кодировкой символов или, может быть, какие-то побеги?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...