使用 PHP 将 target="_blank" 添加到 HTML 的最佳方法

car*_*lli 3 html php replace

我从数据库中提取 HTML 并使用 PHP 将其显示在网页上。可以这么说,将要放入 HTML 的人经验不足,可能会在创建诸如链接之类的东西时遇到困难。我需要在新页面中打开所有链接(我将通过在标签target="_blank"内添加来实现<a>)。现在的问题是:最好的方法是什么?

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

<a href="www.google.com">link</a>
Run Code Online (Sandbox Code Playgroud)

应该输出为:

<a href="www.google.com" target="_blank">link</a>
Run Code Online (Sandbox Code Playgroud)

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

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

但据我从这个答案和许多其他答案中得知,不建议使用正则表达式和 HTML。有没有更好的办法?对于如此简单的操作,使用 HTML/XML 解析器等似乎有些过分了。

Jon*_*owe 5

更好的方法是在 Javascript 中执行此操作并让客户端处理它。如果你使用jquery,那么就很简单:

$(document).ready(function() {
    $('a').attr('target', '_blank');
});
Run Code Online (Sandbox Code Playgroud)

或者在普通的 JavaScript 中:

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

如果您确实需要用 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();
Run Code Online (Sandbox Code Playgroud)

应该管用