Поиск слова с экранированным апострофом в строке с помощью strpos

У меня есть слово с экранированным апострофом в строке. Я пытаюсь использовать strpos, чтобы определить, есть ли в строке слово с экранированным апострофом или нет. К сожалению, это повторяет ложь каждый раз. Что я делаю неправильно? Я попытался в strpos с 1 экранированной косой чертой, 2 экранированной косой чертой, вплоть до 5, но каждый раз это повторяет ложь.

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

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

else {
echo "false.";
}

1

Решение

Здесь есть две проблемы: первая заключается в том, что вы экранировали строку, а вторая — в вашей логике, основанной на возврате из strpos функция.

Первая проблема заключается в том, что вам не нужно выходить из поиска strpos — это не функция регулярных выражений!

Вторая проблема заключается в том, что ваша (неэкранированная) строка поиска будет совпадать с нулевой позицией, которую PHP также интерпретирует как ложное значение.

PHP strpos документы здесь государство:

Предупреждение
Эта функция может возвращать логическое значение 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 считает ложными: —

При преобразовании в логическое значение следующие значения считаются ЛОЖНЫМИ:

само логическое ЛОЖЬ

целое число 0 (ноль)

Поплавок 0.0 (ноль)

пустая строка и строка «0»

массив с нулевыми элементами

объект с нулевыми переменными-членами (только PHP 4)

специальный тип NULL (включая неустановленные переменные)

SimpleXML объекты, созданные из пустых тегов

Любое другое значение считается ИСТИННЫМ (включая любой ресурс).

Предупреждение: -1 считается ИСТИННЫМ, как и любое другое ненулевое (отрицательное или положительное) число!

От: http://php.net/manual/en/language.types.boolean.php

3

Другие решения

Других решений пока нет …