У меня есть слово с экранированным апострофом в строке. Я пытаюсь использовать strpos, чтобы определить, есть ли в строке слово с экранированным апострофом или нет. К сожалению, это повторяет ложь каждый раз. Что я делаю неправильно? Я попытался в strpos с 1 экранированной косой чертой, 2 экранированной косой чертой, вплоть до 5, но каждый раз это повторяет ложь.
$text = "example\'s";
$text = " ".$text." ";
if (strpos($text, " example\\\\\'s ")) {
echo "true.";
}
else {
echo "false.";
}
Здесь есть две проблемы: первая заключается в том, что вы экранировали строку, а вторая — в вашей логике, основанной на возврате из 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 считается ИСТИННЫМ, как и любое другое ненулевое (отрицательное или положительное) число!
Других решений пока нет …