添加目标的最佳方式=" _blank"使用PHP的HTML

时间:2014-07-30 14:50:44

标签: php html replace

我从数据库中提取HTML并使用PHP在网页上显示它。让我们说,那些将放入HTML的人并不是非常经验,并且很可能只是在创建诸如链接之类的东西。我需要在新页面中打开所有链接(我将通过在target="_blank"标记中添加<a>来完成。现在问题是:最好的方法是什么?

以数据库中的以下HTML为例:

<a href="www.google.com">link</a>

应该如下:

<a href="www.google.com" target="_blank">link</a>

我目前有这条线做我想做的事:

$text = preg_replace('/(<a.*?)>/', '$1 target="_blank">', $text);

但正如我从this回答以及许多其他人所知道的那样,不建议使用正则表达式和HTML。有没有更好的办法?对于这样一个简单的操作,使用HTML / XML解析器等似乎是最重要的。

2 个答案:

答案 0 :(得分:2)

更好的方法是在Javascript中执行此操作并让客户端处理它。如果您使用的是jquery,那就像以下一样简单:

$(document).ready(function() {
    $('a').attr('target', '_blank');
});

或在香草javascript:

 window.onload = function() {
     var a = document.getElementsByTagName('A');
     for (var i =0, l=a.length; i < l; i++) {
         a[i].setAttribute('target', '_blank');
     }
 }

如果你真的需要在PHP中完成它:

$html = "YOUR HTML STRING";
$doc = new DOMDocument();
$dom = $doc->loadHTML($html);

foreach ($dom->getElementsByTagName('a') as $link) {
   $link->setAttribute('target', '_blank');
}
$html = $dom->saveHTML();

应该有效

答案 1 :(得分:0)

  

但正如我从这个答案和其他许多人那样了解SO,不建议使用正则表达式和HTML。

正确

  

有更好的方法吗?

是。使用HTML解析器。

  

对于这样一个简单的操作,使用HTML / XML解析器等似乎是最重要的。

“将target="_blank"添加到某些链接”听起来就像一个简单的操作,但真正的操作实际上是“采取一些用户输入,这可能是HTML但可能是标签汤和完整错误,并尝试根据一些预定义的规则编辑它“。

使用HTML解析器。这就是他们的目的。