php堆栈溢出,如何模拟堆栈溢出自动链接行为

这是基于相同的daringfireball.net正则表达式,但比Eric Coleman的示例增加了更多逻辑,并且配置了最大URL深度(SO似乎是50),截断URL时最大路径深度(SO似乎是)。是2),以及省略号(…)。

据我所知,它复制了所有SO URL重写功能,至少与到目前为止在此处的评论和响应中所讨论的功能相同。

function auto_link_text($text) {

$pattern  = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#';

return preg_replace_callback($pattern, 'auto_link_text_callback', $text);

}

function auto_link_text_callback($matches) {

$max_url_length = 50;

$max_depth_if_over_length = 2;

$ellipsis = '…';

$url_full = $matches[0];

$url_short = '';

if (strlen($url_full) > $max_url_length) {

$parts = parse_url($url_full);

$url_short = $parts['scheme'] . '://' . preg_replace('/^www\./', '', $parts['host']) . '/';

$path_components = explode('/', trim($parts['path'], '/'));

foreach ($path_components as $dir) {

$url_string_components[] = $dir . '/';

}

if (!empty($parts['query'])) {

$url_string_components[] = '?' . $parts['query'];

}

if (!empty($parts['fragment'])) {

$url_string_components[] = '#' . $parts['fragment'];

}

for ($k = 0; $k < count($url_string_components); $k++) {

$curr_component = $url_string_components[$k];

if ($k >= $max_depth_if_over_length || strlen($url_short) + strlen($curr_component) > $max_url_length) {

if ($k == 0 && strlen($url_short) < $max_url_length) {

// Always show a portion of first directory

$url_short .= substr($curr_component, 0, $max_url_length - strlen($url_short));

}

$url_short .= $ellipsis;

break;

}

$url_short .= $curr_component;

}

} else {

$url_short = $url_full;

}

return "$url_short";

}

输入样例:

This is my text.  I wonder if you know about asking questions on StackOverflow:

Check This out http://www.stackoverflow.com/questions/1925455/how-to-mimic-stackoverflow-auto-link-behavior

Also, base_convert php function?

http://pt.php.net/manual/en/function.base-convert.php#52450

http://pt.php.net/manual/en/function.base-convert.php?wtf=hehe#52450

http://a.b/c/d/e/f/test

and http://a.b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/z/y/w/z/test

样本输出:

This is my text.  I wonder if you know about asking questions on StackOverflow:

Check This out http://stackoverflow.com/questions/1925455/…

Also, base_convert php function?

http://pt.php.net/manual/en/…

http://pt.php.net/manual/en/…

http://a.b/c/d/e/f/test

and http://a.b/c/d/…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值