php strpos multiple,html标签内的字符串

时间:2014-05-18 17:12:39

标签: php url curl strpos

我输入的域名是:

example.com

curl $data给了我这个,总是不同的:

<span></span>之间的

是域名。

1. <span>example.com</span> 2. <span>www.example.com</span> 3. <span>http://example.com</span> 4. <span>https://example.com</span> 5. <span>https://example.com/</span> 6. <span>https://example.com/categories</span> 7. <span><b>www</b>.<b>example</b>.<b>com</b></span> 8. <span><b>www</b>.<b>example.com</b></span> 9. <span>Not included</span>

专业人士对我有好的解决方案?发现一个人应该停止。

不幸的是,我当前的代码失败了。 : - (

              $dname = array($d1, $d2, $d3, $d4, $d5, $d6, $d7, $d8, $d9);

              $pos = strpos($data, $dname);

              if ($pos !== false) {
                 echo 'YES';
              } else { 
                 echo 'NO'
              }

2 个答案:

答案 0 :(得分:1)

我个人会使用正则表达式:

preg_match_all('~<span>(.*)</span>~Ui',$data,$domains);
print_r($domains[1]);

这会给你一个域名列表。

或者在你的情况下,你可以使用名为strip_tags()的函数,这个函数只会删除span个标签,并留下内部的内容。然后你可以简单地explode("\n",$stripped_string);

此后,您可以使用函数in_array()来检查给定的域是否在数组中,或者...... array_diff(),它将比较数组与不在的给定和返回元素那里。

例如:

$data = <curl_result>;
preg_match_all('~<span>(.*)</span>~Ui',$data,$domains); // this finds all domains in span tags
$domains = array_map('trim',$domains[1]); // this rewrites results and removes blank spaces
$seeking = array('domain1.com','domain2.com');
foreach($seeking as $needle){
   if(in_array($needle,$domains) !== false)
      echo "Domain $needle was found!<br />";
   else
      echo "Domain $needle was not found!<br />";
}

答案 1 :(得分:0)

PHP期望strpos的第二个参数是一个字符串,否则it is converted to an integer and applied as the ordinal value of a character(作为状态the documentation)。你提供的参数是一个数组。您可以遍历数组并检查其中的每个元素是否都在$data字符串中找到。代码可能如下所示:

$found = array();

foreach ($dname as $key => $val)
    $found[$key] = strpos($data, $val);

此处创建一个名为$found的数组,然后使用strpos$dname的每个连续元素返回的值填充。然后,您可以检查$found(index)以确定是否在$data中找到了特定元素。

要简单检查$dname中是否找到$data的任何元素,请使用以下代码:

$found = false;

foreach($dname as $val) {
    if (strpos($data, $val) !== false) {
        $found = true;
        break;
    }
}