使用 PHP 从图像中提取 alt 和/或 title 属性

Posted

技术标签:

【中文标题】使用 PHP 从图像中提取 alt 和/或 title 属性【英文标题】:Using PHP to extract the alt and/or title attributes from images 【发布时间】:2011-05-31 01:21:02 【问题描述】:

我用这个来提取图片的src或者图片的完整路径。

preg_match_all('/\< *[img][^\>]*src *= *[\"\']0,1([^\"\'\ >]*)/',$content,$matches);

到目前为止,它对我有用,我得到了所有图像源的数组。我试图贪婪并从图像标签中捕获 alt 和 title 值。

我知道不建议使用正则表达式来做,但我真的需要一个快速的解决方案。如果图像标签中缺少 alt 或 title,我不希望它返回错误。

感谢您的任何意见并深表歉意。我知道使用解析器更容易也更合适,但是因为我可以通过预赛获得 src,所以我想我也可以获得 alt 和标题! :)

非常感谢,新年快乐:D

【问题讨论】:

你说得对,使用解析器更容易也更合适。 :) 捕获所有可能组合的正则表达式看起来很糟糕。 尤其是当您后来决定要捕获更多标签时... 好吧,问题是脚本会为很多用户安装在很多公共服务器上,如果解析器不存在或者不能在他们的主机上工作,他们会怪我:)所有服务器都兼容和支持的解析器? 【参考方案1】:

使用phpQuery,这很容易。

http://code.google.com/p/phpquery/(好链接)

【讨论】:

是的,但链接有点不对:) 对于懒惰的编码器有没有直接的例子?大声笑..基本上我想在数组中获取 src、alt、标题,这样我就可以遍历它们并显示我的自定义画廊.. 我认为您应该能够在网站上找到示例。一个月前第一次用还是smt,很开心;)【参考方案2】:

这是一个使用 PHP 的 DOM 解析器的解决方案:

$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadhtml(file_get_contents("http://***.com"));
libxml_use_internal_errors(false);

$items = $domd->getElementsByTagName("img");
$data = array();

foreach($items as $item) 
  $data[] = array(
    "src" => $item->getAttribute("src"),
    "alt" => $item->getAttribute("alt"),
    "title" => $item->getAttribute("title"),
  );

【讨论】:

问题。这些图像存储在一个名为 $content 的变量中。我可以使用它来代替加载 html 或新文档吗?怎么样? 第三行:$domd-&gt;loadHTML($content). 哇 :D 它从第一次尝试就起作用了。好吧,这比正则表达式简单。如果某些图像没有 alt 或标题,它不会停止我假设的脚本 不,你只会有空字符串。【参考方案3】:

试试这个,这是我在 3 分钟内能想到的最好的方法......

if(preg_match_all('@<img(\s?(src|alt|title)="([^"]+)"\s?)?(\s?(src|alt|title)="([^"]+)"\s?)?(\s?(src|alt|title)="([^"]+)"\s?)?\/?>@si',$content,$m))
$img_array = array(
    $m[2][0]=>$m[3][0],
    $m[5][0]=>$m[6][0],
    $m[8][0]=>$m[9][0]
    );

print_r($img_array);

【讨论】:

以上是关于使用 PHP 从图像中提取 alt 和/或 title 属性的主要内容,如果未能解决你的问题,请参考以下文章

从图像或扫描文档中提取表格数据(非 pdf)

使用 PHP 提取图像上的某些部分

使用php从html页面中提取图像url

在 php 脚本中执行 curl 命令并从服务器获取响应并提取它

PHP从文件夹中提取随机图像

如何使用python从图像中提取文本或数字