MakeItLink - Detecting URLs In Text And Making Them Links | Joseph Scott - 0 views
-
Chris Wherley on 22 Mar 12class MakeItLink { protected function _link_www( $matches ) { $url = $matches[2]; $url = MakeItLink::cleanURL( $url ); if( empty( $url ) ) { return $matches[0]; } return "{$matches[1]}{$url}"; } public function cleanURL( $url ) { if( $url == '' ) { return $url; } $url = preg_replace( "|[^a-z0-9-~+_.?#=!&;,/:%@$*'()x80-xff]|i", '', $url ); $url = str_replace( array( "%0d", "%0a" ), '', $url ); $url = str_replace( ";//", "://", $url ); /* If the URL doesn't appear to contain a scheme, we * presume it needs http:// appended (unless a relative * link starting with / or a php file). */ if( strpos( $url, ":" ) === false && substr( $url, 0, 1 ) != "/" && !preg_match( "|^[a-z0-9-]+?.php|i", $url ) ) { $url = "http://{$url}"; } // Replace ampersans and single quotes $url = preg_replace( "|&([^#])(?![a-z]{2,8};)|", "&$1", $url ); $url = str_replace( "'", "'", $url ); return $url; } public function transform( $text ) { $text = " {$text}"; $text = preg_replace_callback( '#(?])(\()?([\w]+?://(?:[\w\\x80-\\xff\#$%&~/\-=?@\[\](+]|[.,;:](?![\s<])|(?(1)\)(?![\s<])|\)))*)#is', array( 'MakeItLink', '_link_www' ), $text ); $text = preg_replace( '#(]+?>|>))]+?>([^>]+?)#i', "$1$3", $text )