将url转换为格式化的文本上的超链接

时间:2016-10-26 12:49:38

标签: php preg-replace preg-match

我使用以下代码将转换网址转换为文本上的超链接。但问题是我想使用缩短标题的超链接,例如这是网址http://stackoverflow.com/questions/ask?title=convert%20url%20to%20hyperlink%20on%20text%20as%20formatted,并在转换后像这样:

<a href="http://stackoverflow.com/questions/ask?title=convert%20url%20to%20hyperlink%20on%20text%20as%20formatted">http://stackoverflow.com/questions/ask?title=convert%20url%20to%20hyperlink%20on%20text%20as%20formatted</a>

我想这样:

<a href="http://stackoverflow.com/questions/ask?title=convert%20url%20to%20hyperlink%20on%20text%20as%20formatted">http://stackoverflow.com/...</a>

这是我的代码:

$stringdata = preg_replace('|([\w\d]*)\s?(https?://([\d\w\.-]+\.[\w\.]{2,6})[^\s\]\[\<\>]*/?)|i', '$1 <a href="$2" target="_blank">$2</a>', $stringdata);

标题应缩短,但网址应与原始标题相同。

三江源。

2 个答案:

答案 0 :(得分:1)

您始终可以使用parse_url找到here

以下是一个例子:

$url = 'http://www.stackoverflow.com/questions/ask?title=convert%20url%20to%20hyperlink%20on%20text%20as%20formatted';

$splitUrl = parse_url($url);

echo '<a href="' . $url . '"/>' . $splitUrl['scheme'] . '://' . $splitUrl['host'] .'/... </a>';

parse_url根据提供的网址创建一个数组。

更新: 在该链接上使用Mikael Roos回答,我想出了你需要做的事情。

function make_clickable($text) {
    $regex = '#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#';
    return preg_replace_callback($regex, function ($matches) {
        $splitUrl = parse_url($matches[0]);
        return "<a href='{$matches[0]}'>{$splitUrl['scheme']}://{$splitUrl['host']}/..</a>";
    }, $text);
}

echo make_clickable('Some odd text here that makes https://stackoverflow.com/questions/ask?title=convert%20url%20to%20hyperlink%20on%20text%20as%20formatted clickable');

答案 1 :(得分:0)

试试这个

$var='http://stackoverflow.com/questions/ask?title=convert%20url%20to%20hyperlink%20on%20text%20as%20formatted';

$array=explode('/', $var);

$url=$array[0]."//".$array[2]."/...";