Intereting Posts
PHP mysqli подготовил операторы, удаляющие ведущие нули Архитектура больше подходит для веб-приложений, чем MVC? Имя переменной как переменная Почему мое тестовое приложение в бесконечном цикле перенаправления? Настроить автоматическое создание Post Slug в WordPress Как обрабатывать пользовательские заголовки с запросом на предварительный рейс CORS? AJAX – CodeIgniter Объединить результаты для SQL-запроса Перенос загруженного файла на удаленный сервер SQLSTATE : Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удалось – Laravel Как обновить страницу нажатием кнопки «Назад»? Использование имени домена вместо localhost внутри с https в xampp PHP PDO транзакция Дублирование symfony2 – assetic assetic: команда dump не создает таблицы стилей правильно PHP не распознает установку MySQL Не удалось найти путь аутентификации «login_check» для Symfony2

Получить URL-адрес из строки

Некоторое время назад я искал код для получения URL-адреса из строки с использованием PHP. Я в основном пытаюсь получить сокращенный URL-адрес из сообщения, а затем выполнить запрос HEAD, чтобы найти фактическую ссылку.

У кого-нибудь есть код, который возвращает URL-адреса из строк?

Заранее спасибо.

Редактировать для Ghost Dog:

Вот пример того, что я анализирую:

$test = "I am testing this application for http://test.com YAY!"; 

И вот ответ, который я получил, решил:

 $regex = '$\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]$i'; preg_match_all($regex, $string, $result, PREG_PATTERN_ORDER); $A = $result[0]; foreach($A as $B) { $URL = GetRealURL($B); echo "$URL<BR>"; } function GetRealURL( $url ) { $options = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_ENCODING => "", CURLOPT_USERAGENT => "spider", CURLOPT_AUTOREFERER => true, CURLOPT_CONNECTTIMEOUT => 120, CURLOPT_TIMEOUT => 120, CURLOPT_MAXREDIRS => 10, ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); return $header['url']; } 

См. «Ответ для деталей».

Этот код может быть полезен (см. Последнее сообщение MadTechie):

http://www.phpfreaks.com/forums/index.php/topic,245248.msg1146218.html#msg1146218

 <?php $string = "some random text http://tinyurl.com/9uxdwc some http://google.com random text http://tinyurl.com/787988"; $regex = '$\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]$i'; preg_match_all($regex, $string, $result, PREG_PATTERN_ORDER); $A = $result[0]; foreach($A as $B) { $URL = GetRealURL($B); echo "$URL<BR>"; } function GetRealURL( $url ) { $options = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_ENCODING => "", CURLOPT_USERAGENT => "spider", CURLOPT_AUTOREFERER => true, CURLOPT_CONNECTTIMEOUT => 120, CURLOPT_TIMEOUT => 120, CURLOPT_MAXREDIRS => 10, ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); return $header['url']; } ?> 

Что-то вроде:

 $matches = array(); preg_match_all('/http:\/\/[a-zA-Z0-9.-]+\/[a-zA-Z0-9.-]+/', $text, $matches); print_r($matches); 

Вам нужно будет настроить регулярное выражение, чтобы получить именно то, что вы хотите.

Чтобы получить URL-адрес, рассмотрите что-то простое:

curl -I http://url.com/path | grep Location: | awk '{print $2}'