我想替换文本中的所有链接除了图像链接
$text = '<p>
<a href="http://msn.com" rel="attachment wp-att-7046"><img class="alignnone size-full wp-image-7046" alt="geak-eye-mars" src="http://google/2013/06/geak-eye-mars.jpg" width="619" height="414" /></a></p>
bla bla bla bla bla bla
<p><a href="http://google.com" target="_blank">any word</a>
bla bla bla bla bla bla
</p>';
我想要替换(http://msn.com and http://google.com)
和其他链接,但像这样的图像链接(http://google/2013/06/geak-eye-mars.jpg)
保持原样。
我希望你理解我..我只想替换这个标签之间的所有链接
href="Link"
通过此代码
$text = ereg_replace("all links","another link">",$text);
谢谢
答案 0 :(得分:4)
使用DOM执行此操作:
$text = <<<LOD
<p><a href="http://msn.com" rel="attachment wp-att-7046">
<img src="http://google/2013/06/geak-eye-mars.jpg" /></a></p>
bla bla bla bla bla bla
<p><a href="http://google.com" target="_blank">any word</a>
bla bla bla bla bla bla
</p>
LOD;
$doc = new DOMDocument();
@$doc->loadHTML($text);
$aNodes = $doc->getElementsByTagName("a");
foreach($aNodes as $aNode) {
$href = $aNode->getAttribute("href");
$new_href = '!!!Youhou!!! '. $href;
$aNode->setAttribute("href", $new_href);
}
$new_text = $doc->saveHTML();
答案 1 :(得分:0)
如果您想要一个不会破坏的永久解决方案,请使用DOM解析器,就像其他答案所示。使用正则表达式解析html是一个非常糟糕的主意。
但是,如果你只是想要一次性的快速解决方案,那么这样的事情就可以了:
preg_replace('/(href=["\']?)[^"\']+/', '$1' . $newtext, $html);
保证,这会在某些html文件上失败(例如,如果URL没有包含在引号中),但只要编写html文件的人使用了最佳实践,它就能使用。不要在生产代码中使用它。如初。
答案 2 :(得分:0)
$text = <<<LOD
<p><a href="http://msn.com" rel="attachment wp-att-7046">
<img src="http://google/2013/06/geak-eye-mars.jpg" /></a></p>
bla bla bla bla bla bla
<p><a href="http://google.com" target="_blank">any word</a>
bla bla bla bla bla bla
</p>
LOD;
$doc = new DOMDocument();
$text = mb_convert_encoding($text, 'HTML-ENTITIES', "UTF-8");
@$doc->loadHTML($text);
$aNodes = $doc->getElementsByTagName("a");
foreach($aNodes as $aNode) {
$href = $aNode->getAttribute("href");
$new_href = '!!!Youhou!!! '. $href;
$aNode->setAttribute("href", $new_href);
}
$new_text = $doc->saveHTML();