2010-01-31 2 views
2

И это:В PHP StrPos() не может найти двойные кавычки ('"') в строке

echo 'Tok: '.$tok.' Strpos: '.strpos($tok, "\"").' length: '.strlen($tok).'<br>'; 

И это:

echo 'Tok: '.$tok.' Strpos: '.strpos($tok, '"').' length: '.strlen($tok).'<br>'; 

Результат следующий вывод:

Tok: "fresh Strpos: length: 11 

Strpos полностью не находит двойную кавычку, возвращает false (я проверил с strpos() === false). Может кто-нибудь сказать мне, что здесь происходит? Я могу найти n o документация, предполагающая, что strpos не может обрабатывать двойные кавычки, почему он не находит ее? Я нахожусь на своем пути.

+0

Его работа для меня в 5.3.0 ... – Rifat

ответ

7

Вы уверены, что двойная кавычка в $tok на самом деле буквально ", а не как объект HTML? Вы можете проверить свой HTML-код?

+0

этом. Проверьте источник веб-страницы, когда вы эхом $ tok. –

+1

Только что вернулся к сообщению, что я обнаружил это. Это объект HTML хорошо: " * головной стол * Входная санитация для сбоя. –

+0

Ввод "sanitisation" полностью для сбоя во все времена! HTML-кодирование не должно происходить до момента, когда текст помещается в HTML-вывод; делать это на входном этапе обречен на неудачу, испортил содержимое базы данных и дыры в безопасности, в которые попадает другой контент. – bobince

2

Используя php в командной строке, ваш код работает для меня.

Я заметил, что вы не указали содержание $ tok. Я также заметил, что похоже, что вы выводите браузер. Вы уверены, что html

&quot 

не используется вместо фактического символа кавычки?

1

strpos ($ tok, '"') равен === 0 в вашем случае, так как самый первый элемент в $ tok является двойной цитатой ("). Затем, когда вы печатаете 0, вы ничего не получаете, потому что это логическое значение FALSE.

Эта функция может возвращать Boolean FALSE, но может также возвращать не-логическое значение, которое приводится к FALSE, например, 0 или "". Пожалуйста, прочитайте раздел о булевых для более информации. Используйте оператор === для проверки возвращаемого значения этой функции - http://us3.php.net/strpos

+2

Nah, только когда это ЛОЖНО, выход будет пустым; в противном случае это должно быть числовое значение «0», не так ли? –

Смежные вопросы