【问题标题】:extract image src from text?从文本中提取图像 src?
【发布时间】:2012-07-12 12:26:22
【问题描述】:

我有一个变量 $content,其中包含一些文本和这种形式的图像(图像数量未知):

    text text text text <img src="path/to/image/1">text text text text
    <img src="path/to/image/2">
text text text text text text text text text text text text text text text text <img src="path/to/image/3"><img src="path/to/image/4">text text text text 
<img src="path/to/image/5">

我想提取所有图像 src 并使用 php 将它们存储在数组中,如下所示:

array(
[1]="path/to/image/1"
[2]="path/to/image/2"
[3]="path/to/image/3"
[4]="path/to/image/4"
[5]="path/to/image/5"
.
.
.
)

做这样的事情最好的方法是什么。我已经尝试过函数 explode 但这种方式似乎效率低下。

【问题讨论】:

标签: php


【解决方案1】:
    $dom = new domDocument;
    $dom->loadHTML($html);
    $dom->preserveWhiteSpace = false;
    $imgs  = $dom->getElementsByTagName("img");
    $links = array();
    for($i = 0; $i < $imgs->length; $i++) {
       $links[] = $imgs->item($i)->getAttribute("src");
    }

【讨论】:

  • 这段代码只显示了数组的最后一个元素。我该如何解决?
【解决方案2】:

这里是一个使用simplehtmldom的例子:

include("simple_html_dom.php");
$content = '
text text text text <img src="path/to/image/1">text text text text
    <img src="path/to/image/2">
text text text text text text text text text text text text text text text text <img src="path/to/image/3"><img src="path/to/image/4">text text text text 
<img src="path/to/image/5"> ';

$html = str_get_html($content);
$images = $html->find("img");
$links = array();
foreach($images as $image) {
  $links[] = $image->src;
}

print_r($links);

输出:

Array
(
    [0] => path/to/image/1
    [1] => path/to/image/2
    [2] => path/to/image/3
    [3] => path/to/image/4
    [4] => path/to/image/5
)

【讨论】:

  • 你不觉得安装 simplehtmldom 来完成这样一个琐碎的任务是不是有点矫枉过正?
  • 不,它只是一个不需要安装的 PHP 文件。并且 HTML 解析必须使用 HTML 解析器来完成。不是正则表达式或其他类似的东西。
  • 我的意思不是“安装”本身,而是下载一个 340kB 的压缩文件(所以可能是 1 MB 未压缩?)来做一些 domDocument 的事情,而且根本不需要“安装”任何东西,恕我直言, 过分了
  • @mike 实际上那个压缩文件是一堆例子!主文件小于 50k 定义了 2 个类,这对于那些不想要所有同谋 dom 的人来说是一件好事!
【解决方案3】:

使用正则表达式:

<?php

$str = '    text text text text <img src="path/to/image/1">text text text text
    <img src="path/to/image/2">
text text text text text text text text text text text text text text text text <img src="path/to/image/3"><img src="path/to/image/4">text text text text
<img src="path/to/image/5">';


preg_match_all('@<img.*src="([^"]*)"[^>/]*/?>@Ui', $str, $out);

print_r($out[1]);

?>

输出:

Array
(
    [0] => path/to/image/1
    [1] => path/to/image/2
    [2] => path/to/image/3
    [3] => path/to/image/4
    [4] => path/to/image/5
)

【讨论】:

  • 对于 DOM 可以处理的东西,我不推荐使用正则表达式。稍微修改一下 HTML 就不行了。
猜你喜欢
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 2013-02-03
  • 2014-07-31
相关资源
最近更新 更多