簡體   English   中英

使用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()將返回0 ,以指示字符串的開始。

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

在這種情況下,您不能使用相等,而必須使用不相等:

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

評論跟進:

我看不到它怎么可能“完全沒有效果”:

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 )。 但是在您的字符串中,“”位於字符串的開頭,而thefore在位置0。mb_strpos或strpos返回子字符串的位置(如果找到),或者布爾值false(如果找不到)。 由於您正在檢查以下情況:

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

您實際上正在檢查:

if (0)

這就是為什么您認為它是錯誤的。 采用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM