我有这段代码,它通过一个字符串并输出第一个img的src=""
属性。
我也需要弄清楚alt=""
属性。
$first_image = '';
if ((preg_match('/<img[^>]*>/i', $article_fulltext, $matches ) == 1))
if (preg_match('/src="([^"]*)"/', $matches[0], $morematches ) == 1)
$first_image = $morematches[0];
我已经尝试过,但是没有用;
$first_image = '';
if ((preg_match('/<img[^>]*>/i', $article_fulltext, $matches ) == 1))
if (preg_match('/src="([^"]*)"/', $matches[0], $morematches ) == 1)
if (preg_match('/alt="([^"]*)"/', $matches[0], $morematchesAlt ) == 1)
$first_image = $morematches[0];
$first_image_alt = $morematchesAlt[0];
我做错了什么?
答案 0 :(得分:2)
同意您宁愿使用DOMDocument的意见,但是为了使用代码,您必须对其进行一些更改,例如:
<?php
$article_fulltext = '<html><body><img src="imgSrc" alt="imgAlt"></body></html>';
if (preg_match('/<img[^>]*>/i', $article_fulltext, $matches)) {
preg_match('/src="([^"]*)"/', $matches[0], $morematches);
preg_match('/alt="([^"]*)"/', $matches[0], $morematchesAlt);
$first_image = $morematches[0];
$first_image_alt = $morematchesAlt[0];
var_dump($first_image);
var_dump($first_image_alt);
}
运行此脚本时-您收到下一个结果:
string(12) "src="imgSrc""
string(12) "alt="imgAlt""
答案 1 :(得分:1)
您的代码缺少大括号来正确定义条件语句的结构。每当在if
子句下使用多个语句时,建议使用花括号来防止它们嵌套并产生不希望的效果。
此外,正如已经提到的,正则表达式并不是解析HTML的最佳方法,因此这是使用DOMDocument的解决方案:
<?php
# Create a new DOMDocument instance and load the html content.
$dom = new DOMDocument;
$dom -> loadHTML($article_fulltext);
# Cache the first image element.
$img = $dom -> getElementsByTagName("img") -> item(0);
# Print its 'src' and 'alt' attributes.
echo $img -> getAttribute("src");
echo $img -> getAttribute("alt");
?>