我有一个小函数,它通过一堆文本查找文本形式的任何url并将它们转换为html a:
e.g
normal text lipsum etc http://www.somewebsitelink.com lipsum lipsum
变为:
normal text lipsum etc <a href="www.somewebsitelink.com">http://www.somewebsitelink.com</a> lipsum lipsum
我的功能如下:
function linkify($text)
{
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'<a target="_blank" href="\\1">\\1</a>', $text);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'\\1<a target="_blank" href="http://\\2">\\2</a>', $text);
return $text;
}
这一切都运行正常,但是我使用这个功能并打印出来的html是在有限的宽度空间中,有时链接最终会更大,然后才能适应空间,最终会溢出。
我想知道如何做两件事:
一个。从文本中删除不必要的内容,即'http://',所以我最终会以
结束<a href="http://www.somewebsitelink.com">www.somewebsitelink.com</a>
和
湾如果文本大于20个字符,请删除后面的所有内容并放入几个点。 e.g:
<a href="http://www.somewebsitelink.com">www.somewebsitelin...</a>
我想知道如果不使用正则表达式我是否可能必须这样做,但是我对reg exp的理解相当有限。
答案 0 :(得分:2)
我认为这将满足您的需求。它需要一个url作为其唯一的参数并删除前导'http:// www。“然后返回字符串,如果它少于20个字符。如果它超过20个字符它返回前17个字符并追加'.. 。'。
function get_formatted_url($url){
$url = trim($url);
$url = str_replace("http://www.", "", strtolower($url));
if(strlen($url) > 20){
return substr($url, 0, 16) . '...';
}else{
return $url;
}
}
编辑:使用preg_replace_callback()
的示例function get_formatted_url($url){
$url = $url[0];
$formatted_url = trim($url);
$formatted_url = str_replace("http://www.", "", strtolower($formatted_url));
if(strlen($formatted_url) > 20){
return '<a href="'.$url.'" />'. substr($formatted_url, 0, 16) . '... </a> ';
}else{
return '<a href="'.$url.'" />'. $formatted_url . '</a> ';
}
}
function linkify($text){
$reg = '(((f|ht)tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)';
$text = preg_replace_callback($reg, "get_formatted_url", $text);
return $text;
}
$text = "abcd http://www.abc.com?hg=alkdjfa;lkdjfa;lkdjfa;lkdsjfa;ldks abcdefg http://www.abc.com";
echo linkify($text);
答案 1 :(得分:2)
$link = 'http://www.somewebsitelink.com';
function linkify($text, $maxLen = 15)
{
return preg_replace_callback('(((f|ht){1}tp://)([-a-zA-Z0-9@:%_\+.~#?&//=]+))', function($t) use ($maxLen) {
if ( strlen($t[3]) > $maxLen)
$t[3] = substr_replace($t[3], '...', $maxLen);
return sprintf('<a target="_blank" href="%s">%s</a>', $t[0], $t[3]);
}, $text);
}
header('content-type: text/plain');
echo linkify($link);
PHP代码&lt; = 5.2
$link = 'http://www.somewebsitelink.com';
function linkify($text, $maxLen = 15)
{
$funcBody = <<<FUNC
if ( strlen(\$t[3]) > \$maxLen)
\$t[3] = substr_replace(\$t[3], '...', \$maxLen);
return sprintf('<a target="_blank" href="%s">%s</a>', \$t[0], \$t[3]);
FUNC;
$func = create_function(
'$t, $maxLen =' . $maxLen,
$funcBody
);
return preg_replace_callback('(((f|ht){1}tp://)([-a-zA-Z0-9@:%_\+.~#?&//=]+))', $func, $text);
}
header('content-type: text/plain');
echo linkify($link);
结果
<a target="_blank" href="http://www.somewebsitelink.com">www.somewebsite...</a>
答案 2 :(得分:0)
使用php substr函数。例如:
<?php substr($text,0,10);?>