替换脱机文件javascript中的所有链接

替换脱机文件javascript中的所有链接,javascript,php,file,Javascript,Php,File,我有一个动态下载的脱机html文件,我用它向最终用户显示 while (!feof($file_handle)) { $line = fgets($file_handle); echo $line; } fclose($file_handle); 我不介意用javascript或php替换页面上的所有链接,这样所有标记都可以转到mysite.com/redirct.php?这里是link_。感谢您的帮助,祝您愉快:)首先,最好将所有文件内容保存到一个变量中,以便进行所有转换。fg

我有一个动态下载的脱机html文件,我用它向最终用户显示

while (!feof($file_handle)) {
   $line = fgets($file_handle);
   echo $line;

}
fclose($file_handle);

我不介意用javascript或php替换页面上的所有链接,这样所有标记都可以转到mysite.com/redirct.php?这里是link_。感谢您的帮助,祝您愉快:)

首先,最好将所有文件内容保存到一个变量中,以便进行所有转换。fgets以固定大小的块抓取数据,字符串可能会被切断,并且无法确定它们是否是链接

$buffer = '';
while (!feof($file_handle)) {
   $buffer .= fgets($file_handle);
}
echo $buffer;

fclose($file_handle);
链接可能很棘手。您是在强制所有内容都以“http”开头,还是会抛出子域?无论如何,你是在regex的土地上。以下是一些让您开始学习的方法:

$buffer = preg_replace("/(https?:\/\/.+)\s/U", "<a href=\"http://mysite.com/redirct.php?$1\">$1</a>", $buffer);
$buffer=preg\U replace(“/(https?:\/\/.+)\s/U”,”,$buffer);
也就是说,以“http://”或“https://”开头的任何字符串都是用于替换的URL。URL在第一次出现空格字符时结束

$buffer = preg_replace("/\s(www\..+)\s/U", "<a href=\"http://mysite.com/redirect.php?http://$1\">$a</a>", $buffer); 
$buffer=preg\U replace(“/\s(www\..+)\s/U)”,“”,$buffer);
类似地,这将查找以“www.”开头的任何字符串,并将其标记为URL


对于URL的所有不同变体以及它们在文本中的显示方式,这会变得复杂得多,但它应该为您指出一个解决方案

使用preg_replace似乎会破坏网站上的css,因为我正在测试的网站,很可能是用户尝试使用我的网站,将css托管在url的不同域上。