Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to mimic Stack Overflow Auto-Link Behavior

Tags:

With PHP how can I mimic the auto-link behavior of Stack Overflow (which BTW is awesomely cool)?

For instance, the following URL:

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

Is converted into this:

<a title="how to mimic stackoverflow auto link behavior" rel="nofollow" href="http://www.stackoverflow.com/questions/1925455/how-to-mimic-stackoverflow-auto-link-behavior">stackoverflow.com/questions/1925455/…</a> 

I don't really care for the title attribute in this case.


And this:

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

Is converted into this:

<a rel="nofollow" href="http://pt.php.net/manual/en/function.base-convert.php#52450">pt.php.net/manual/en/…</a> 

How can I make a similar function in PHP?

PS: Check my comments on this question for some more examples and behaviors.

like image 242
Alix Axel Avatar asked Dec 18 '09 00:12

Alix Axel


People also ask

Is it ok to copy code from Stack Overflow?

If you want to copy code from Stack Overflow or any other source, these are the two most important points to take into consideration: properly give credit to the people you're copying the code from and make sure you fully understand what you're copying.

What is Stack Overflow link?

Stack Overflow is a question and answer website for professional and enthusiast programmers. It is the flagship site of the Stack Exchange Network. It was created in 2008 by Jeff Atwood and Joel Spolsky. It features questions and answers on a wide range of topics in computer programming.


1 Answers

Try this out. The URL-matching regex pattern is from Daring Fireball.

/**  * Replace links in text with html links  *  * @param  string $text  * @return string  */ function auto_link_text($text) {    // a more readably-formatted version of the pattern is on http://daringfireball.net/2010/07/improved_regex_for_matching_urls    $pattern  = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))';     $callback = create_function('$matches', '        $url       = array_shift($matches);        $url_parts = parse_url($url);         $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);        $text = preg_replace("/^www./", "", $text);         $last = -(strlen(strrchr($text, "/"))) + 1;        if ($last < 0) {            $text = substr($text, 0, $last) . "&hellip;";        }         return sprintf(\'<a rel="nofollow" href="%s">%s</a>\', $url, $text);    ');     return preg_replace_callback($pattern, $callback, $text); } 

Input Text:

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 

Output Text:

This is my text.  I wonder if you know about asking questions on StackOverflow:  Check This out <a rel="nofollow" href="http://www.stackoverflow.com/questions/1925455/how-to-mimic-stackoverflow-auto-link-behavior">stackoverflow.com/questions/1925455/&hellip;</a>   Also, base_convert php function? <a rel="nofollow" href="http://pt.php.net/manual/en/function.base-convert.php#52450">pt.php.net/manual/en/&hellip;</a>  <a rel="nofollow" href="http://pt.php.net/manual/en/function.base-convert.php?wtf=hehe#52450">pt.php.net/manual/en/&hellip;</a> 
like image 59
Eric Coleman Avatar answered Sep 20 '22 15:09

Eric Coleman