false 时 strpos 仍然返回

strpos still returning when false

$post_id = 228;

$content_post = get_post($post_id);
$content = $content_post->post_content;


$doc = new DOMDocument();
$doc->loadHTML($content);

$links = $doc->getElementsByTagName('a');

foreach ($links as $link){
    $href = $link->getAttribute('href');
    $avoid  = array('.jpg', '.png', '.gif', '.jpeg');

    if (strpos($href, $avoid) == false) {
        echo $link->nodeValue, '<br>';
        echo $href, '<br>';
    }
}

strpos 在 false 时仍然返回 url - 知道我错过了什么吗? !== 也不行。

补充信息:我正在尝试排除所有图片网址,所以如果您有更好的方法 - 请随时分享。

更新,也不行。 (使用文档尝试过)。

    foreach ($links as $link){
    $href = $link->getAttribute('href');
    $avoid  = array('.jpg', '.png', '.gif', '.jpeg');
    $pos = strpos($href, $avoid);

    if ($pos === false) {

    echo $link->nodeValue, '<br>';
    echo $href, '<br>';
   }
   }

Warning: strpos(): needle is not a string or an integer。使用另一种方式,例如 preg_match:

$href = 'aaa.jpeg';
preg_match('/(\.jpg|\.png|\.gif|\.jpeg)/', $href, $matches);

var_dump($matches);

if(empty($matches)) {
    //not match...
}

如果你想检查$href是否包含$avoid中的任何字符串,你可以将它们替换为空,看看是否还有原始字符串。

if ($href == str_replace($avoid, '', $href)) { ...

str_replace 可以取一个数组,不像 strpos.