从函数中获取值

时间:2011-12-08 12:54:34

标签: php function

我正在完成一个转换字符串并将其作为链接传递的脚本,但除此之外,它还会使用API​​缩短URL。问题是我无法想到如何只获取URL而不是整个链。

功能:

function findAndShort($string) {
    $text = preg_replace("/(https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#]*(\?\S+)?)?)?/u", '<a href="$0">$0</a>', $string);
    return $text; 
}

示例:

$chk = findAndShort("Blahblah http://domain.tld");
echo $chk;

在这种情况下,只需要http://domain.tld,我尝试使用$ chk [0],但当然,打印第一个字符就行了。

2 个答案:

答案 0 :(得分:0)

具有函数的东西是你只能返回函数中return下的单个值,所以在你的情况下,在测试你的函数之后,返回值是原始输入值。

如果您希望函数只返回URL组件,我会使用explode来分隔字符串,然后在preg_match函数的结果数组的每个部分上运行explode https,ftp或mailto,一旦我知道我正在使用的数组的哪个部分,我就会停止进程,定义var,因为我相信你想要返回链接的代码,我会做的就是做类似的事情

return '<a href="'.$url.'">'.$url.'</a>';

请注意,var $url将从上面的过程创建。

我希望这会有所帮助。

答案 1 :(得分:0)

只需在正则表达式的开头添加^.*并使用$ 1而不是$ 0:

$text = preg_replace("/^.*((https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#,]*(\?\S+)?)?)?)/u", '<a href="$1">$1</a>', $string);

您还可以简化一下,

~^.*((https?|ftps?|mailto)://[-\p{L}\p{N}_.]+(:\d+)?(/([\p{L}\p{N}/_.#,]*(\?\S+)?)?)?)~u