使用strpos在php字符串中搜索标签

时间:2015-05-21 20:39:14

标签: php strpos

这是一个UTF-8字符串

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

我想检查$ string中是否存在<h2>标记

我试试:

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

但所有这些情况都是假的。怎么了?

2 个答案:

答案 0 :(得分:0)

您的测试失败,因为您的&#34;针&#34;字符串出现在haystack的开头,因此strpos()将返回0,以指示字符串的开头。

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

在这种情况下你不能使用相等,你必须使用不等式:

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

评论后续:

我看不出它怎么可能&#34;根本没有效果&#34;:

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)

答案 1 :(得分:0)

你的最后一个应该有效(使用mb_strpos)。 但在你的字符串中,&#34;&#34;是正确的字符串的开头,因此在0的位置。 如果找到则mb_strpos或strpos返回子字符串的位置,如果未找到则返回布尔值false。 既然你正在检查这样的条件:

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

您实际上是在检查:

if (0)

这就是为什么你认为它是假的。 使用:

if (mb_strpos($string , '<h2>') !== false)