我想将相对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);
/
,因此不会替换href=somefolder/somefile
之类的网址。 /
之前有空格或=
部分href
之后有空格,我也希望它能够正常工作。第1点是最重要的。你能帮忙改善吗?
我见过PHP示例,它将相对URL替换为绝对URL like this one。
但要求是相对URL已知/
已找到但在我的情况下我没有管理此部分(我正在替换textarea中的所有URL)。
答案 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很棒!