我输入的域名是:
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'
}
答案 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;
}
}