1

我想替换文本中的所有链接图片链接除外

$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);

谢谢

4

3 回答 3

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();
于 2013-06-19T17:27:36.270 回答
0

如果您想要一个不会中断的永久解决方案,请使用 DOM 解析器,就像其他答案所建议的那样。使用正则表达式来解析 html 是一个非常糟糕的主意。

但是,如果您只想要一个一次性、快速的解决方案,可以使用以下方法:

preg_replace('/(href=["\']?)[^"\']+/', '$1' . $newtext, $html);

保证,这在某些 html 文件上会失败(例如,如果 URL 没有用引号括起来),但只要编写 html 文件的人使用最佳实践,它就可以在大多数情况下工作。不要在生产代码中使用它。曾经。

于 2013-06-19T17:37:36.103 回答
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();
于 2013-06-23T19:17:37.283 回答