PHP:将相对URL替换为textarea中的绝对URL

时间:2012-05-20 09:42:01

标签: php url relative absolute

我想将相对URL替换为textarea中的绝对URL。所以像这样:

/somefolder/somefile 

替换为:

http://www.mysite123.com/somefolder/somefile

我有这个替换功能来完成这项工作:

$replaceStrs = array('href=/', "href='/", 'href="/');
$datdescription = str_ireplace($replaceStrs, 'href="http://www.' . $domain . "/", $datdescription);
  1. 问题是它在值的开头需要/,因此不会替换href=somefolder/somefile之类的网址。
  2. 如果/之前有空格或=部分href之后有空格,我也希望它能够正常工作。
  3. 第1点是最重要的。你能帮忙改善吗?

    我见过PHP示例,它将相对URL替换为绝对URL like this one

    但要求是相对URL已知/已找到但在我的情况下我没有管理此部分(我正在替换textarea中的所有URL)。

3 个答案:

答案 0 :(得分:0)

PHP:

function expand_links($link) {
    return('href="http://example.com/'.trim($link, '\'"/\\').'"');
}
$textarea = preg_replace('/href\s*=\s*(?<href>"[^\\"]*"|\'[^\\\']*\')/e', 'expand_links("$1")', $textarea);

我还将正则表达式更改为使用双引号或撇号。

答案 1 :(得分:0)

为什么PHP函数可以为你做这个时大惊小怪呢?

http://php.net/manual/en/function.http-build-url.php

PS:它似乎只适用于PECL。我刚刚测试了我的Hostgator VPS(标准的CentOS 5 repos)以及我的测试WAMP环境,它似乎可用于两者。

NB:此外,您真的不应盲目替换HTML片段。首先,它最终可能无法正常工作(编码问题),其次,它可能会给您的代码增加安全问题。

答案 2 :(得分:0)

我为你扩展了Mihai Stancu的答案!


<?php 
function expand_hrefs($link, $url) {
    return('href="http://'.$url.'/'.trim($link, '\'"/\\').'"');
}

function expand_srcs($link, $url) {
    return('src="http://'.$url.'/'.trim($link, '\'"/\\').'"');
}

$html = preg_replace('/href\s*=\s*(?<href>"[^\\"]*"|\'[^\\\']*\')/e', 'expand_hrefs("$1", "'.$url.'")', $html);
$html = preg_replace('/src\s*=\s*(?<src>"[^\\"]*"|\'[^\\\']*\')/e', 'expand_srcs("$1", "'.$url.'")', $html);
?>

这是我的第一个回答..

Stackoverflow.com很棒!