【问题标题】:Split and replace HTML tag elements拆分和替换 HTML 标签元素
【发布时间】:2012-12-11 16:03:30
【问题描述】:

我有一个动态标签元素,我需要用 PHP 替换其中的特定标签。

基本上我只需要标签<a> 部分,用文本替换<img>。比如:

<a target="_blank" 
   title="Visit MarcAira14 on Facebook" 
   href="http://www.facebook.com/MarcAira14"
>
  <img alt="Facebook icon" src="/sites/all/modules/contrib/socialmedia/icons/levelten/glossy/48x48/facebook.png">
</a>

会变成:

<a target="_blank" 
   title="Visit MarcAira14 on Facebook"
   href="http://www.facebook.com/MarcAira14"
>Facebook</a>

我还需要获取标题属性中的最后一个字符串 (title="Visit MarcAira14 on Facebook"),在本例中为 "Facebook"

任何有想法或建议的人将不胜感激。

【问题讨论】:

标签: php html-parsing


【解决方案1】:

这正是 HTML 解析器存在的目的。一种方法是使用 PHP 自己的DOMDocument

另一种可能更简单的方法是phpQuery,它是 DOMDocument 的一个很好的包装器。 (好像好久没更新了,最后一次更新是2009年5月。)

phpQuery大量借鉴了jQuery,所以如果你熟悉它,可以使用许多已知的概念。

对于你的情况,它应该是这样的:

$doc = phpQuery::newDocument($yourHtmlOrHtmlFragment);

$links = $doc['a[title!=""]:has(img)'];

foreach( $links as $link )
{
    $title = $link->getAttribute('title');
    $words = explode(' ', $title);
    $last_word = end( $words );
    pq($link)->empty()->text( $last_word );
}

另见phpQuery manual

此处讨论了其他用于 PHP 的 HTML 解析器:Robust and Mature HTML Parser for PHP

【讨论】:

    【解决方案2】:

    这是正则表达式版本。我已经对其进行了测试,并且可以正常工作。 text.html 是您的源字符串。

    <?php
    
    $string = file_get_contents('text.html');
    $pattern = "/<img alt=([^<])*/m";
    $replacement = 'Facebook';
    echo preg_replace($pattern, $replacement, $string);
    
    ?>
    

    它搜索“

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多