使用 strpos 在 php 字符串中搜索标签
search tags in a php string with strpos
这是一个 UTF-8 字符串
$string = '<h2> a none english char - utf-8 string </h2>';
我想检查 <h2>
标签是否存在于 $string 中
我试试:
if(strpos($string , '<h2>'))
or
if(strpos($string , '<h2>') == true )
or
if(strpos($string , '<h2>') === true)
or
if(mb_strpos($string , '<h2>' ))
但所有这些条件都返回错误。怎么了?
您的测试失败,因为您的 "needle" 字符串恰好出现在您的大海捞针的开头,因此 strpos() 将 return 0
指示字符串开头。
if (0) -> false
if (0 == true) -> false
if (0 === true) -> false
在这种情况下不能使用相等,必须使用不等:
if (strpos(...) !== FALSE)
评论跟进:
我没看出来怎么可能"no effect at all":
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)
你的最后一个应该可以工作(使用 mb_strpos)。
但是在你的字符串中,"" 是字符串的开头,因此位于位置 0。
mb_strpos 或 strpos returns 子字符串的位置(如果找到),如果未找到,则返回布尔值 false。
因为你正在检查这样的条件:
if (mb_strpos($string, '<h2>'))
您实际检查的是:
if (0)
这就是为什么你认为它是错误的。
使用:
if (mb_strpos($string , '<h2>') !== false)
这是一个 UTF-8 字符串
$string = '<h2> a none english char - utf-8 string </h2>';
我想检查 <h2>
标签是否存在于 $string 中
我试试:
if(strpos($string , '<h2>'))
or
if(strpos($string , '<h2>') == true )
or
if(strpos($string , '<h2>') === true)
or
if(mb_strpos($string , '<h2>' ))
但所有这些条件都返回错误。怎么了?
您的测试失败,因为您的 "needle" 字符串恰好出现在您的大海捞针的开头,因此 strpos() 将 return 0
指示字符串开头。
if (0) -> false
if (0 == true) -> false
if (0 === true) -> false
在这种情况下不能使用相等,必须使用不等:
if (strpos(...) !== FALSE)
评论跟进:
我没看出来怎么可能"no effect at all":
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)
你的最后一个应该可以工作(使用 mb_strpos)。 但是在你的字符串中,"" 是字符串的开头,因此位于位置 0。 mb_strpos 或 strpos returns 子字符串的位置(如果找到),如果未找到,则返回布尔值 false。 因为你正在检查这样的条件:
if (mb_strpos($string, '<h2>'))
您实际检查的是:
if (0)
这就是为什么你认为它是错误的。 使用:
if (mb_strpos($string , '<h2>') !== false)