php如何替换文章内部的外部链接

php如何替换文章内部的外部链接,php,regex,Php,Regex,我想在我的文章中替换除我的网站链接以外的所有外部url。因此,外部站点的原始链接被加密/屏蔽/重写 例如: 原始链接:www.google.com 将其改写为:www.mydomain.com/goto/google.com 我尝试了DOMDocument,但它有错误: 警告:DOMDocument::loadHTML():在第20行[…][…]中的第1行实体中重新定义了属性目标 我试过了 <?php $html ='1224 <a href="http://www.google.

我想在我的文章中替换除我的网站链接以外的所有外部url。因此,外部站点的原始链接被加密/屏蔽/重写

例如:

原始链接:www.google.com 将其改写为:www.mydomain.com/goto/google.com

我尝试了DOMDocument,但它有错误:

警告:DOMDocument::loadHTML():在第20行[…][…]中的第1行实体中重新定义了属性目标

我试过了

<?php
 $html ='1224 <a href="http://www.google.com">google</a> 567';
$tracking_string = 'http://example.com/goto/';
$html = preg_replace('#(<a[^>]+href=")(http|https)([^>" ]+)("?[^>]*>)#is','\\1'.$tracking_string.'\\2\\3\\4',$html);
echo $html; 

关于正则表达式,我不是很在行,但经过一番搜索之后,您似乎只需要一个

正则表达式:
(?!.+(\bgoogle.com\b))(567';
$tracking\u字符串=http://example.com/track.php?url=';
$html=preg_replace('#(?!.+(\bgoogle.com\b))(


编辑:请注意,
preg\u replace
可能不是您想要的。在用多个实例检查代码后,它不会替换所有匹配项,只替换最后一个实例。就表达式的逻辑而言,它适用于多个实例。演示和。

我对RegEx不是很了解,但经过一番搜索后,你似乎只需要一个

正则表达式:
(?!.+(\bgoogle.com\b))(567';
$tracking\u字符串=http://example.com/track.php?url=';
$html=preg_replace('#(?!.+(\bgoogle.com\b))(


编辑:请注意,
preg\u replace
可能不是您想要的。在检查多个实例的代码后,它不会替换所有匹配项,只替换最后一个实例。就表达式的逻辑而言,它适用于多个实例。和上的演示可能是有用的。如何不替换内部链接在文章中?是这样吗?你应该研究一下,因为正则表达式不是正确的工具。可能是,如何不替换文章中的内部链接有用吗?是这样吗?你应该研究一下,因为正则表达式不是正确的工具。如何将原始链接(如www.google.com)放入base64_encode()我尝试了base64_encode(“\\2\\3”)但是它不起作用。你可以通过使用函数
preg\u replace\u callback
来实现这一点。在这个主题上,我也找到了一个很好的例子。请确保使用自己的表达式。如何将原始链接(如www.google.com)放入base64\u encode()我尝试了base64\u encode('\\2\\3'))但是它不起作用。你可以通过使用函数
preg\u replace\u callback
来实现这一点。在这里你可以了解更多关于它的信息。我也找到了一个关于这个主题的好例子。请确保使用你自己的表达式。