[^\s()]+)|(?R))*\) | # else match a link with title ^(https?|ftp):\/\/(([^\s<>()]+)|(?R))+(?context) && preg_match($pattern, $markdown, $matches)) { return [ ['autoUrl', $matches[0]], strlen($matches[0]) ]; } return [['text', substr($markdown, 0, 4)], 4]; } protected function renderAutoUrl($block) { $href = htmlspecialchars($block[1], ENT_COMPAT | ENT_HTML401, 'UTF-8'); $decodedUrl = urldecode($block[1]); $secureUrlText = preg_match('//u', $decodedUrl) ? $decodedUrl : $block[1]; $text = htmlspecialchars($secureUrlText, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8'); return "$text"; } }