我目前有几个DB条目,如下所示:
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
我正在尝试在打印时过滤这些条目,并添加所有网址http://anothersite.com/?
的前面。同时将新的url目标作为链接,但将原始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解决方案:)谢谢!
答案 0 :(得分:1)
以下代码应该有效。我做了一些大的改动。第一个是我使用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>';
}
?>