对于知道正则表达式的人来说应该相当简单。不幸的是,我不是那些知情人士。
如何在以下示例中将省略号附加到超过27个字符的任何内容,以便列出的第四个链接显示为http://iamanextremely.com/long/lin
?
<?php
$input = <<<EOF
http://www.example.com/
http://example.com
www.example.com
http://iamanextremely.com/long/link/so/I/will/be/trimmed/down/a/bit/so/i/dont/mess/up/text/wrapping.html
EOF;
$output = preg_replace("/(http:\/\/|(www\.))(([^\s<]{4,27})[^(\s|,)<]*)/",
'<a href="http://$2$3" rel="nofollow">http://$2$4</a>', $input);
答案 0 :(得分:1)
除非你需要匹配特定的格式,即只有http://链接,否则正则表达式是过度的。只需使用字符串函数并循环遍历测试其长度的网址。如果您想获得幻想,请使用explode()
和array_walk()
if (strlen($url) > 27) {
echo substr($url, 0, 27) . '...';
}
else {
echo $url;
}
答案 1 :(得分:1)
您可以使用preg_replace_callback
将回调应用于所有匹配的网址。在回调中,你可以根据自己的意愿制作精美的东西。
$output = preg_replace_callback('#(http://|www\\.)[^\\s<]+[^\\s<,.]#i',
'trimlong',$input);
function trimlong($match)
{
$url = $match[0];
$disp = $url;
if ( strlen($disp) > 24 ) $disp = substr($disp,0,24)."...";
return "<a href=\"$url\">$disp</a>";
}
(ps。我刚开始使用你的正则表达式,我不认为匹配的网址应该是那么麻烦。)
答案 2 :(得分:0)
如果要在HTML页面中显示,您可以考虑使用CSS来设置省略号,而不是手动截断它。
你会使用这样的CSS:
.cutshort {
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
width:100%;
}
然后在屏幕上截断文本并给出省略号,即使HTML代码包含完整的字符串。
此技术并不适用于所有情况,但在其工作的地方,它是在将内容发送给用户之前对其进行黑客攻击的绝佳替代方法。
一个重要注意事项:当前版本的Firefox浏览器不显示省略号点。它确实仍然正确截断,所以这不是一场灾难。所有其他浏览器都显示点,并希望很快就会添加新版本的Firefox。