String bir URL almak

2 Cevap php

Bir süre için şimdi ben PHP kullanarak bir dize URL Çıkış almak için bir kod arıyor oldum. Ben temelde bir mesajın bir Kısaltılmış URL almak için çalışıyor, ve daha sonra gerçek bağlantı bulmak için bir HEAD isteği yapmak ediyorum.

Herkes dizeleri URL'leri döndüren herhangi bir kodu var mı?

Teşekkürler gelişmiş.

Edit for Ghost Dog:

İşte ayrıştırma ben ne bir örnek:

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

Ve burada ben bunu çözmüş var ki yanıttır:

$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']; 
}

Ayrıntılar için cevap bakın.

2 Cevap

Bu kod (MadTechie en son mesajı bakın) yararlı olabilir:

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']; 
}  

?>

Gibi bir şey:

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

Siz ne istediğinizi tam olarak almak için ayarlamak için regexpi gerekir.

URL'sini almak için, gibi basit bir şey düşünün:

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