Php 当所有标记都存在时效果非常好(DOM)

Php 当所有标记都存在时效果非常好(DOM),php,html,dom,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]->getAttribu

当所有标记都存在时,这非常有效:

$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'));
但是,如果缺少第一个标记

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

即使第一个标记丢失了?

否,因为如果没有HTML元素标记,那么就有带空格和引号的字符。

我认为这是不可能的。因为
$dom->getElementsByTagName('a')[0]->getAttribute('href')
这样做是在存储HTML标记的属性值
';
预匹配所有('@((https?:/)?([-\\w]+\.[-\\w\\.]+)+\\w(:\\d+)(/([-\\w/\\.]*(\\\?\\S+)*)@',$data,$match);
echo$match[0][0]。“
”//标签的URL echo$match[0][1]//图像标签的URL
你到底想要什么?“有没有办法即使第一个标记丢失也能保持相同的输出?”不难理解……但为什么它会“杀死”整个页面?至少可以解决这个问题吗?我不介意输出是否与没有标记的原始链接相同。但当所有内容都变为空白时,这是一个问题。不幸的是,没有打开
@MrK:文本在人眼看来可能像HTML,但在浏览器或DOMDocument中,只有一个从左到右的解析器,
'a href=“…”>“
'需要帮助的朋友
是无法区分的。您不再有
a
元素,因此
getElementsByTagName('a')
根本找不到任何东西。如果您不能依靠源标记获得如此简单的正确结果,那么您所能做的最好的事情就是直接从输入中提取URL,而不使用DOMDocument。@zainul abdeen的解决方案完成了这项工作。我尝试使用:
preg_match(“/”([^“]+)“/”,$data,$href);$data=$href[1]
但是,当第一个标记丢失时,它会删除所有内容。是否有办法确保如果第一个标记丢失,它只输出原始url而不输出第一个标记?@MrK现在查看我编辑的答案。这将给您预期的结果,即
http://somelink.com
WOW!!我刚刚测试了它,它可以在所有级别上运行。我意思是我尝试了几个有class=“test”和target=“\u blank”的链接“,有无第一个标记,输出为
http://somelink.com
太酷了。我已经做了三个小时了。我想我永远也做不到。非常感谢。你能再帮我一件事吗?如果www.存在,你的preg_match_似乎不起作用。它必须是代码的一部分,因为一些URL将包含https://和一些。如果您能将此添加到您的解决方案中,我将不胜感激。当我放置类似(注意www):
的内容时,输出为
http://www
链路的其余部分被剥离。能修好吗?
$data='a href="http://somelink.com"><img src="http://somelink.com/image.png"></a>' 
http://somelink.com
$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