【问题标题】:PHP using DOM to extract img src, and keep its place within text [duplicate]PHP使用DOM提取img src,并将其保留在文本中[重复]
【发布时间】:2013-08-01 18:31:03
【问题描述】:

所以我正在构建一个简单的 HTML scraper,在文本中有一些符号图像,我需要的是获取这个 img 标签的 src,但保持它们相同放置在文本中的img标签中。

--由于我问错了问题而重写了问题。

【问题讨论】:

  • 如果您正在编写 HTML 抓取工具,为什么不使用 HTML DOM 解析器而不是正则表达式?
  • 用regExp不能很好地解析HTML,使用HTML解析器(阅读stackoverflow.com/a/1732454/1529630
  • 请不要使用 html 遍历库之外的任何东西来解析 html,这个社区比什么都讨厌。
  • 我在 HTML DOM 中使用了一切,但这部分给我带来了麻烦,因为我需要知道每个图像在文本中的位置,而我没有用 DOM 做到这一点
  • 如果你已经使用了 DOM 解析器,它应该只能提取 src 属性。也许如果你问那个,它可能会更快地解决实际问题。

标签: php regex string


【解决方案1】:

由于您使用的是 DOM 解析器,因此您可以在变量中提取图像的 src 属性。之后使用以下代码:

$imgsrc = '/Handlers/Image.ashx?size=small&name=3&type=symbol';
$url = parse_url($imgsrc);
$query = htmlspecialchars_decode($url['query']);
parse_str($query, $arr);
echo $arr['name'] . "\n"; // prints 3

【讨论】:

  • 好的,我明白了,但是如何确保它显示在原始图像所在的同一位置?
  • 可以使用DOMNode::replaceChild完全替换图片标签
  • 我要出去几个小时,等我回来再测试一下,太棒了。
  • 虽然它比我要困难得多,但我设法让它工作,再次。
  • 不客气,很高兴你能成功。
【解决方案2】:

好吧,我真的建议使用适当的 HTML 解析库来执行此操作,但如果它真的很简单,您可以使用像 /<img[^>]*alt="(\d+?)"/ 这样的正则表达式。

【讨论】:

    【解决方案3】:

    如果你想从 /Handlers/Image.ashx?size=small&name=3&type=symbol 的 src 属性中获取 name= 部分,你可以试试这个

    <?php
    $src = '/Handlers/Image.ashx?size=small&amp;name=3&amp;type=symbol';
    $x = preg_replace('/^.*name=([^&]*).*$/i','[$1]',$src);
    echo $x;
    ?>
    

    【讨论】:

      猜你喜欢
      • 2014-08-22
      • 2013-02-25
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多