在字符串中找到 URL,替换它并更改 href
Find URL in string, replace it and alter href
我目前有一些数据库条目如下所示:
1. This is some text http://www.sitehere.com more text
2. Text https://www.anothersite.com text text text
3. http://sitehere.com http://sitehereagain.com
4. Just text here blabla
我试图在打印这些条目时过滤它们,并在所有 url 的前面添加 http://anothersite.com/?
。同时将新的 url 目的地设为 link 但将原始 url 保留为文本:
text text <a href="http://anothersite.com/?http://sitehere.com">http://sitehere.com</a> text
到目前为止,我已经设法使用以下代码添加 http://anothersite.com/?
部分:
$result = preg_replace('/\bhttp:\/\/\b/i', 'http://anothersite.com/?http://', $input);
$result = preg_replace('/\bhttps:\/\/\b/i', 'http://anothersite.com/?https://', $input);
但是 ahref 不是我想要的方式。相反,它是:
text text <a href="http://anothersite.com/?http://sitehere.com">http://anothersite.com/?http://sitehere.com</a> text
PS:我不是在寻找 javascript 解决方案 :) 谢谢!
以下代码应该可以工作。我做了一些大的改变。第一个是我使用 preg_replace_callback
而不是 preg_replace
所以我能够正确编码 URL 并对输出有更多的控制。另一个变化是我正在匹配整个域,因此回调函数可以在 <a>
标签之间插入 URL,也可以将其添加到超链接。
<?php
$strings = array(
'This is some text http://www.sitehere.com more text',
'Text https://www.anothersite.com text text text',
'http://sitehere.com http://sitehereagain.com',
'Just text here blabla'
);
foreach($strings as $string) {
echo preg_replace_callback("/\b(http(s)?:\/\/[^\s]+)\b/i","updateURL",$string);
echo "\n\n";
}
function updateURL($matches) {
$url = "http://anothersite.com/?url=";
return '<a href="'.$url.urlencode($matches[1]).'">'.$matches[1].'</a>';
}
?>
我目前有一些数据库条目如下所示:
1. This is some text http://www.sitehere.com more text
2. Text https://www.anothersite.com text text text
3. http://sitehere.com http://sitehereagain.com
4. Just text here blabla
我试图在打印这些条目时过滤它们,并在所有 url 的前面添加 http://anothersite.com/?
。同时将新的 url 目的地设为 link 但将原始 url 保留为文本:
text text <a href="http://anothersite.com/?http://sitehere.com">http://sitehere.com</a> text
到目前为止,我已经设法使用以下代码添加 http://anothersite.com/?
部分:
$result = preg_replace('/\bhttp:\/\/\b/i', 'http://anothersite.com/?http://', $input);
$result = preg_replace('/\bhttps:\/\/\b/i', 'http://anothersite.com/?https://', $input);
但是 ahref 不是我想要的方式。相反,它是:
text text <a href="http://anothersite.com/?http://sitehere.com">http://anothersite.com/?http://sitehere.com</a> text
PS:我不是在寻找 javascript 解决方案 :) 谢谢!
以下代码应该可以工作。我做了一些大的改变。第一个是我使用 preg_replace_callback
而不是 preg_replace
所以我能够正确编码 URL 并对输出有更多的控制。另一个变化是我正在匹配整个域,因此回调函数可以在 <a>
标签之间插入 URL,也可以将其添加到超链接。
<?php
$strings = array(
'This is some text http://www.sitehere.com more text',
'Text https://www.anothersite.com text text text',
'http://sitehere.com http://sitehereagain.com',
'Just text here blabla'
);
foreach($strings as $string) {
echo preg_replace_callback("/\b(http(s)?:\/\/[^\s]+)\b/i","updateURL",$string);
echo "\n\n";
}
function updateURL($matches) {
$url = "http://anothersite.com/?url=";
return '<a href="'.$url.urlencode($matches[1]).'">'.$matches[1].'</a>';
}
?>