Здесь есть две проблемы: первая заключается в экранировании строки, а вторая - в вашей логике на основе возврата из функции strpos
.
Первая проблема заключается в том, что вам не нужно экранировать ввод поиска в strpos
- это не функция регулярного выражения!
Вторая проблема заключается в том, что ваша (неэкранированная) строка поиска будет соответствовать нулевой позиции, которую PHP также интерпретирует как ложное значение.
В документации по PHP здесь говорится:
Предупреждение Эта функция может возвращать логическое значение ЛОЖЬ, но также может возвращать не логическое значение, которое оценивается как ЛОЖЬ. Пожалуйста, прочтите раздел о логических значениях для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.
Вместо этого используйте этот код, который должен работать нормально:
$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
person
beercohol
schedule
27.08.2015