我从数据库中提取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解析器等似乎是最重要的。
答案 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解析器。这就是他们的目的。