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))]');