1

次のURLのリストを検討してください。

1 http://www.cnn.com/international/stories/423423532
2 http://www.traderscreener.com/blah
3 http://is.gd/fsdaGdfd3
4 http://goo.gl/23V534
5 http://bit.ly/54HFD
6 http://stackoverflow.com/question/ask

短縮URLを元の形式に拡張したいと思います。

$headers = get_headers($URL, 1);
if (!empty($headers['Location'])) {
  $headers['Location'] = (array) $headers['Location'];
  $URL = array_pop($headers['Location']);
}

ただし、すべてのURLを一連の短縮サービスと照合する必要があります。

$array(
  'is.gd', 'bit.ly', 'goo.gl', 'wibi.us', 'tinyurl.com' // etc
)

この場合、これはURL 3、4、および5を除外する必要があります。これを行う最も簡単な方法は、を取得することだと思い***ますhttp://***/blah。正規表現を使用した経験がほとんどないので、必要な正規表現は何ですか?それとも、これにアプローチするためのより良い方法はありますか?

4

3 に答える 3

2

これを行う最も簡単な方法は、ブラックリストを作成しないことです。代わりに、URL をクエリして、リダイレクトされるかどうかを確認してください。HEAD リクエストを送信し、ステータス コードを探します。3xx の場合はリダイレクトがあるため、"Location" ヘッダーを探して、それを新しい URL として使用する必要があります。

于 2012-04-29T11:42:37.927 に答える
2
preg_match('/^http:\/\/(is\.gd|bit\.ly|goog\.gl\|wibi\.us|tinyurl\.com)/i', $URL);
于 2012-04-29T11:39:18.917 に答える
1

URL がその形式であることが確実な場合は、explode() を使用できます。

$url = "http://bit.ly/54HFD";
$tem = explode("/", $url);

$needles = array(
  'is.gd', 'bit.ly', 'goo.gl', 'wibi.us', 'tinyurl.com' // etc
)

foreach($needles as $needle) {
         $res = strpos($tem[2], $needle);
         if ($res !== false) DO_SOMEHING
}
于 2012-04-29T11:39:54.383 に答える