You can get URLs using regular expressions, here are two examples of creating <a> tags from found URLs and how to reduce the content of <a> tags:
<?php $orig_text = <<<TEXT This is some text. http://www.example.com/this-is-a-quite-long-url-to-be-shortened.html http://www.example.com/another-url-to-be-shortened and http://www.example.com/another-one-that-is-longer-than-limit then http://www.example.com/an-ok-url and some text to finish the sentence. Now, try with an HTTPS url: https://www.example.com/this-https-url-is-too-long. And with an already-created tag <a href='http://www2.example.com/this-is-another-long-url.html'>http://www2.example.com/this-is-another-long-url.html</a> <a href='http://www2.example.com/my-test-url-goes-here.html'>And this is just some long long link description to be shortened</a>. More text here. TEXT; $PATTERN_URL='#(?:href=[\'"]?)?!(https?://([^/]+)/([^\s]+))\b#'; define('URL_LENGTH_LIMIT', 36); function create_a_tag($matches) { $url = $matches[1]; $label = $matches[1]; if (strlen($label) > URL_LENGTH_LIMIT) $label = $matches[2] . '/...'; return "<a href='$url'>$label</a>"; } function shorten_url_or_text($url) { if (strlen($url) > URL_LENGTH_LIMIT) { $matches = array(); if (preg_match('#^(https?://[^/]*).*#', $url, $matches)) { // Shorten as for URLS return $matches[1] . '/...'; } else { // Trim to a given length return substr($url, 0, URL_LENGTH_LIMIT-3) . '...'; } } else { return $url; } } function shorten_a_text($matches) { $text = shorten_url_or_text($matches[2]); return $matches[1] . $text . $matches[3]; } // This will replace urls with their shortened form echo "----- CREATE <A> TAGS -----\n"; $text2 = preg_replace_callback($PATTERN_URL, 'create_a_tag', $orig_text); echo $text2 . "\n"; // This will shorten content inside <a> tags echo "----- CREATE <A> TAGS -----\n"; $text3 = preg_replace_callback('@(<a[^>]*>)([^<]*)(</a>)@i', 'shorten_a_text', $text2); echo $text3; echo "\n";
source share