这是一个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>' ))
但所有这些情况都是假的。怎么了?
答案 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)