2015-05-21 2 views
0

это UTF-8 строкапоиск метки в PHP строку с StrPos

$string = '<h2> a none english char - utf-8 string </h2>'; 

Я хочу проверить <h2> тег существует в $ строке или нет

Стараюсь:

if(strpos($string , '<h2>')) 
or 
if(strpos($string , '<h2>') == true) 
or 
if(strpos($string , '<h2>') === true) 
or 
if(mb_strpos($string , '<h2>')) 

, но все эти условия возвращаются неверно. Что случилось?

+1

ли вы пробовали: [ 'mb_strpos()'] (http://php.net/manual/en/function.mb-strpos.php)? – Rizier123

+0

strpos возвращает int или boolean false, поэтому '=== true' будет ВСЕГДА терпеть неудачу. –

ответ

0

Ваши тесты терпят неудачу, потому что ваша строка «игла» происходит прямо в начале вашего стога сена, поэтому strpos() вернет 0, чтобы указать начало строки.

if (0)   -> false 
if (0 == true) -> false 
if (0 === true) -> false 

Вы не можете использовать равенство в этом случае, вы должны использовать неравенство:

if (strpos(...) !== FALSE) 

комментарий Followup:

Я не понимаю, как он мог "никакого эффекта вообще":

php > $string = '<h2> a none english char - utf-8 string </h2>'; 
php > var_dump(strpos($string, '<h2>')); 
int(0) 
php > var_dump(strpos($string, '<h2>') == true); 
bool(false) 
php > var_dump(strpos($string, '<h2>') === true); 
bool(false) 
php > var_dump(mb_strpos($string, '<h2>')); 
int(0) 
php > var_dump(mb_strpos($string, '<h2>') !== false); 
bool(true) 
+0

НЕТ ЭФФЕКТА НА ВСЕ. –

+1

ну, что делает 'var_dump (strpos (...))' show? –

+0

мы берем на себя все это в состоянии puirly. не используя 'var_dump'. –

0

Ваш последний должен работать (с использованием mb_strpos). Но в вашей строке «" справа - начало строки, а значение находится в позиции 0. mb_strpos или strpos возвращает позицию подстроки, если она найдена, или boolean false, если не найден. , так как вы проверяете состояние, как это:

if (mb_strpos($string, '<h2>')) 

Вы на самом деле проверка:

if (0) 

И почему вы видите это как ложь. Использование:

if (mb_strpos($string , '<h2>') !== false) 
Смежные вопросы