Php 将target=\u blank添加到外部链接

Php 将target=\u blank添加到外部链接,php,regex,Php,Regex,我想将target=“\u blank”添加到标记中,以在新页面中打开该链接,因此我找到了以下正则表达式: $content = preg_replace('/(<a href[^<>]+)>/is', '\\1 target="_blank">', $content); $content=preg\u replace('/(/is','\\1 target=“\u blank”>',$content); 这将毫无问题地工作,但此代码将向所有链接添加target

我想将
target=“\u blank”
添加到
标记中,以在新页面中打开该链接,因此我找到了以下正则表达式:

$content = preg_replace('/(<a href[^<>]+)>/is', '\\1 target="_blank">', $content);
$content=preg\u replace('/(/is','\\1 target=“\u blank”>',$content);
这将毫无问题地工作,但此代码将向所有链接添加
target=“\u blank”
,我只想添加
href
http://
开头的链接


我如何才能做到这一点?

您可以使用此正则表达式:

(<a\b[^<>]*href=['"]?http[^<>]+)>

您要求在此处使用正则表达式,但它不适合此工作

$doc = new DOMDocument;
$doc->loadHTML($html); // Load your HTML

$xpath = new DOMXPath($doc);
$links = $xpath->query('//a[starts-with(@href, "http://")]');

foreach($links as $link) { 
   $link->setAttribute('target', '_blank');
}

echo $doc->saveHTML();
如果要按照注释中的建议排除内部链接,可以执行以下操作:

$links = $xpath->query('//a[starts-with(@href, "http://") and 
                        not(starts-with(@href, "http://yoursite.com")) and
                        not(starts-with(@href, "http://www.yoursite.com))]');

只需在“href”之后将“=http\:/”添加到您的正则表达式中@Danield谢谢,我使用您的解决方案,但是在
/
中我有一个错误:忘记退出斜杠:=http\:\/\/此解决方案中有一个问题。有时内部链接可能通过
http://mysite.kom/the-link-path
http://www.mysite.kom/the-link-path
那么我们如何将
添加到regarded Xpath?即
http://mysite.kom
http://www.mysite.kom
将他们排除在
\u blank
目标之外。非常好,谢谢,我建议将此注释添加到答案中。@hwnd
$links = $xpath->query('//a[starts-with(@href, "http://") and 
                        not(starts-with(@href, "http://yoursite.com")) and
                        not(starts-with(@href, "http://www.yoursite.com))]');