1

我有一个动态标签元素,我需要用 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"

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

4

2 回答 2

2

这正是 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 手册

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

于 2012-12-11T16:40:05.440 回答
0

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

<?php

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

?>

它搜索“<img alt=”,然后搜索每个字符,直到第一个“<”,并将其替换为 Facebook。末尾的 m 表示搜索多行。

于 2012-12-11T16:30:01.040 回答