Php 去掉HTML块中的第一个IMG元素
我有一个PHP应用程序,可以从第三方来源获取HTML,HTML可能包含一个或多个IMG元素。我想抓住第一个完整的IMG实例,但不知道如何去做 有人能把我推向正确的方向吗Php 去掉HTML块中的第一个IMG元素,php,html,Php,Html,我有一个PHP应用程序,可以从第三方来源获取HTML,HTML可能包含一个或多个IMG元素。我想抓住第一个完整的IMG实例,但不知道如何去做 有人能把我推向正确的方向吗 谢谢。jQuery可以帮你做这件事 $('img')[0] 如果它位于页面中HTML的较小部分,则相应地调整选择器。如果您假定HTML是有效的HTML,则下面的示例将起作用,但我们不能假定!如果您100%确定它是一个有效的HTML,那么继续使用它,如果不是,我建议您使用更好的方式,如下所示 $html = '<br /&g
谢谢。jQuery可以帮你做这件事
$('img')[0]
如果它位于页面中HTML的较小部分,则相应地调整选择器。如果您假定HTML是有效的HTML,则下面的示例将起作用,但我们不能假定!如果您100%确定它是一个有效的HTML,那么继续使用它,如果不是,我建议您使用更好的方式,如下所示
$html = '<br />First<img src="path/abc.jpg" />Next<img src="path/cde.jpg" />';
$start = stripos($html, '<img');
$extracted = substr($html, $start);
$end = stripos($extracted, '>');
echo substr($html, $start, $end+1);
- 用PHP5+编写的HTMLDOM解析器可以让您以非常简单的方式操作HTML 简单的方法李>
- 需要PHP5+
- 支持无效的HTML
- 使用选择器在HTML页面上查找标记,就像jQuery一样
- 在一行中从HTML中提取内容
- 您可以使用XPath解析html,并以这种方式提取所需的数据。它比字符串位置检查要复杂一点,但如果您决定需要更具体的内容(
src
和alt
,例如,firstimg
标记),它的优点是更加健壮
首先将html字符串加载到DOMDocument中,然后将其加载到XPath中
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');
// Find all images
foreach($html->find('img') as $element) {
echo $element->src . '<br>';
}
我们需要页面上出现的第一个img
,因此使用选择器/genderant::img[1]
。注意,这与//img[1]
不同,尽管这通常会给出类似的结果。这两者之间的区别有很好的解释
// Load html in to DOMDocument, set up XPath
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
使用XPath的一个缺点是,说“将与img
标记匹配的完整字符串返回给我”并不容易,因此我们可以组合一个简单的函数,该函数将迭代匹配节点的属性并重新构建img
标记
$matches = $xpath->evaluate("/descendant::img[1]");
$tag=“”
“这里有一些文字”;
//将html加载到DOMDocument,设置XPath
$doc=新的DOMDocument();
$doc->loadHTML($html);
$xpath=新的DOMXPath($doc);
//获取文档中的第一个img
//注意:与“//img[1]”不同-参见https://stackoverflow.com/a/453902/2287
$matches=$xpath->evaluate(“/genderant::img[1]”);
foreach($matches作为$match进行匹配){
echo buildImgTag($match);
}
/**
*建立一个img标签,给出它的匹配节点
*
*@param domeElement$node Img node
*
*@return-img标签
*/
函数buildImgTag($node){
$tag=“”;
返回$tag;
}
```
因此,总体而言,这是一种比在html上执行
strpos
或regex稍微复杂一些的方法,但如果您决定使用img
标记执行任何操作,例如拉出特定属性,则应能为您提供更大的灵活性。请查看这对PHP应用程序不是很有用的。
$tag = "<img ";
foreach ($node->attributes as $attr) {
$vals[] = $attr->name . '="' . $attr->value . '"';
}
$tag .= implode(" ", $vals) . " />";
<?php
// Example html
$html = '<html><body>'
. ' <img src="/images/my-image.png" alt="My image" width="100" height="100" />'
. 'Some text here <img src="do-not-want-second.jpg" alt="No thanks" />';
// Load html in to DOMDocument, set up XPath
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
// Get the first img in the doc
// N.B. Not the same as "//img[1]" - see https://stackoverflow.com/a/453902/2287
$matches = $xpath->evaluate("/descendant::img[1]");
foreach ($matches as $match) {
echo buildImgTag($match);
}
/**
* Build an img tag given it's matched node
*
* @param DOMElement $node Img node
*
* @return Rebuilt img tag
*/
function buildImgTag($node) {
$tag = "<img ";
$vals = array();
foreach ($node->attributes as $attr) {
$vals[] = $attr->name . '="' . $attr->value . '"';
}
$tag .= implode(" ", $vals) . " />";
return $tag;
}