我在PHP中有两个函数,trimmer($string,$number)
和toUrl($string)
。我想修剪用toUrl()
提取的网址,例如20个字符。从https://www.youtube.com/watch?v=HU3GZTNIZ6M
到https://www.youtube.com/wa...
function trimmer($string,$number) {
$string = substr ($string, 0, $number);
return $string."...";
}
function toUrl($string) {
$regex="/[^\W ]+[^\s]+[.]+[^\" ]+[^\W ]+/i";
$string= preg_replace($regex, "<a href='\\0'>".trimmer("\\0",20)."</a>",$string);
return $string;
}
但问题是匹配的值返回\\0
而不是$url
之类的变量,可以使用函数trimmer()
轻松修剪。
问题是我如何将substr()
应用于\\0
这样的事件substr("\\0",0,20)
?
答案 0 :(得分:2)
你想要的是preg_replace_callback:
function _toUrl_callback($m) {
return "<a href=\"" . $m[0] . "\">" . trimmer($m[0], 20) ."</a>";
}
function toUrl($string) {
$regex = "/[^\W ]+[^\s]+[.]+[^\" ]+[^\W ]+/i";
$string = preg_replace_callback($regex, "_toUrl_callback", $string);
return $string;
}
另请注意(附注中的问题):
编辑:提问者请求提供更多PHP 4友好版。