我有一个动态标记元素,我需要用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属性(title="Visit MarcAira14 on Facebook"
)中的最后一个字符串,在本例中为"Facebook"
。
任何有想法或建议的人都会受到赞赏。
答案 0 :(得分: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 );
}
此处讨论了PHP的其他HTML解析器:Robust and Mature HTML Parser for PHP。
答案 1 :(得分:0)
这是正则表达式版本。我测试了它,它的工作原理。 text.html是你的源字符串。
<?php
$string = file_get_contents('text.html');
$pattern = "/<img alt=([^<])*/m";
$replacement = 'Facebook';
echo preg_replace($pattern, $replacement, $string);
?>
搜索'&lt; img alt ='然后搜索每个字符,直到第一个'&lt;'并用Facebook取而代之。最后的m意味着搜索多行。