Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加目标的最佳方式="_“空白”;使用PHP创建HTML_Php_Html_Replace - Fatal编程技术网

添加目标的最佳方式="_“空白”;使用PHP创建HTML

添加目标的最佳方式="_“空白”;使用PHP创建HTML,php,html,replace,Php,Html,Replace,我从数据库中提取HTML,并使用PHP将其显示在网页上。让我们只说,那些将要输入HTML的人并不是很有经验,他们可能只会努力创建链接之类的东西。我需要在新页面中打开所有链接(我将通过在 应输出为: <a href="www.google.com" target="_blank">link</a> 我现在有这一行来做我想做的事情: $text = preg_replace('/(<a.*?)>/', '$1 target="_blank">', $

我从数据库中提取HTML,并使用PHP将其显示在网页上。让我们只说,那些将要输入HTML的人并不是很有经验,他们可能只会努力创建链接之类的东西。我需要在新页面中打开所有链接(我将通过在

应输出为:

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

我现在有这一行来做我想做的事情:

$text = preg_replace('/(<a.*?)>/', '$1 target="_blank">', $text);
$text=preg_replace('/(答案和许多其他答案)因此,不建议使用正则表达式和HTML。有更好的方法吗?对于这样一个简单的操作,使用HTML/XML解析器等似乎有些过头了

但正如我从这个答案和其他许多答案中所知道的,不建议使用正则表达式和HTML

正确的

有更好的办法吗

是的。使用HTML解析器

对于这样一个简单的操作,使用HTML/XML解析器等似乎有些过头了

“将
target=“\u blank”
添加到某些链接”听起来像是一个简单的操作,但真正的操作实际上是“接受一些用户输入,可能是HTML,但可能是标签汤,并且充满错误,并尝试根据一些预定义的规则对其进行编辑”


使用HTML解析器。这就是它们的设计目的。

更好的方法是使用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');
     }
 }

应该工作

不要在html上使用正则表达式,尤其是当您试图更改html时。使用DOM,然后它是一个简单的
$node->setAttribute('target','u blank'))
javascript是不可能的吗?我绝对不是网络安全方面的专家,但从数据库存储和检索HTML听起来是个坏主意。用户很容易提交恶意javascript和其他代码。我希望你知道你在做什么:\@MarcB Never say Never…@jason:所有的论坛、博客和CMS系统都在那里是个坏主意吗?数据库不在乎你在其中存储什么。它只是数据。危险的是你如何将这些数据输入数据库。我也是。哈哈!我想这是因为问题没有标记为JavaScript。这太荒谬了。无论如何,我要投票表决这个问题。我认为这是解决上述问题的最佳方案。干杯!谢谢老兄。三个dif不同的方法。我正在沿着jquery路线走,但其他选项是一个不错的补充。我在让第一个选项工作时遇到了问题。香草可以正常工作,但jquery不行。请参阅此JSFIDLE。很抱歉,我没有正确关闭文档。就绪包装器。立即更新-
 window.onload = function() {
     var a = document.getElementsByTagName('A');
     for (var i =0, l=a.length; i < l; i++) {
         a[i].setAttribute('target', '_blank');
     }
 }
$html = "YOUR HTML STRING";
$doc = new DOMDocument();
$dom = $doc->loadHTML($html);

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