Мне нужно автоматически разобрать строку и найти, есть ли ссылка на мой сайт, автоматически заменить адрес с помощью HTML-ссылки с кликом.
Предположим, что мои адреса сайта – www.mysite.com + wap.mysite.com + m.mysite.com, мне нужно конвертировать:
My pictures at m.mysite.com/user/id are great.
чтобы:
My pictures at <a href="/user/id" target="_blank">mysite.com/user/id</a> are great.
Вопрос в том, как это сделать (с ereg_replace?) Вместо того, чтобы использовать тонны строк кода .
Обратите внимание, что результат должен быть относительным URL , так что текущий протокол и субдомен используются для целевой ссылки. Если пользователь находится в m поддомене версии HTTPS, целью будет m-поддомен протокола HTTPS и т. Д. Только ссылки на mysite.com должны быть связаны , любые другие ссылки должны рассматриваться как обычный обычный текст. Заранее спасибо!
Сначала совет, держитесь подальше от ereg , он устарел долгое время. Во-вторых, вы, вероятно, можете google и экспериментировать, чтобы придумать выражение preg, которое хорошо работает для вас, поэтому настройте то, что у меня здесь, в соответствии с вашими потребностями.
Мне удалось собрать довольно простой шаблон регулярного выражения для поиска URL-адресов.
preg_match("/m.mysite.com\S+/", $str, $matches);
Если у вас есть URL-адреса, я бы предложил parse_url вместо regex.
И вот код
$sSampleInput = 'My pictures at http://m.mysite.com/user/id are great.'; // Search for URLs but don't look for the scheme, we'll add that later preg_match("/m.mysite.com\S+/", $sSampleInput, $aMatches); $aResults = array(); foreach($aMatches as $sUrl) { // Tack a scheme afront the URL $sUrl = 'http://' . $sUrl; // Try validating the URL, requiring host & path if(!filter_var( $sUrl, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED|FILTER_FLAG_PATH_REQUIRED)) { trigger_error('Invalid URL: ' . $sUrl . PHP_EOL); continue; } else $aResults[] = '<a href="' . parse_url($sUrl, PHP_URL_PATH) . '" target="_blank">' . $sUrl . '</a>'; }