当所有标签都存在时(DOM)工作得很好

时间:2018-04-03 01:33:14

标签: php html dom

当所有标签都存在时,这很有效:

$data='<a href="http://somelink.com"><img src="http://somelink.com/image.png"></a>'   
$html = $data;
$dom = new DOMDocument();
$dom->loadHTML($html);
$data = ($dom->getElementsByTagName('a')[0]->getAttribute('href'));

输出

http://somelink.com

但是如果缺少第一个标签

$data='a href="http://somelink.com"><img src="http://somelink.com/image.png"></a>' 

输出为空白,实际上使整个页面变为空白。有没有办法仍然有相同的输出

http://somelink.com

即使第一个标签丢失了吗?

2 个答案:

答案 0 :(得分:1)

否,因为您没有HTML元素标记,您的字符包含空格和引号。

答案 1 :(得分:0)

我不认为这是可能的。由于$dom->getElementsByTagName('a')[0]->getAttribute('href')执行此操作,因此您要在变量<a>中存储HTML标记$data的属性值。但是如果删除HTML标记,则无法获取不存在的标记的Attribute值。 除此之外,如果您仍想通过删除HTML标记来执行此操作,则应使用字符串操作功能从存储在php变量中的字符串中提取URL。 REGEX也是您问题的解决方案。 以下是从字符串中提取URL的代码。

$data='a href="http://somelink.com"><img src="http://somelink.com/image.png"></a>';
preg_match_all('@((https?://)?([-\\w]+\\.[-\\w\\.]+)+\\w(:\\d+)?(/([-\\w/_\\.]*(\\?\\S+)?)?)*)@', $data, $match);
echo $match[0][0]."<br>"; //URL of <a> tag
echo $match[0][1]; //URL of image tag