1

リモートサイトのコンテンツをプルするためにcURLを使用しています。すべての「href=」属性をチェックして、それらが相対パスか絶対パスかを判断してから、リンクの値を取得して、href="http://www.website.com/index.phpなどにパスする必要があります。 ?url = [ABSOLUTE_PATH] "

どんな助けでも大歓迎です。

4

2 に答える 2

1

質問を正しく理解した場合の解決策の1つは次のとおりです。

$prefix = 'http://www.website.com/index.php?url=';
$regex = '~(<a.*?href\s*=\s*")(.*?)(".*?>)~is';
$html = file_get_contents('http://cnn.com');

$html = preg_replace_callback($regex, function($input) use ($prefix) {
  $parsed = parse_url($input[2]);

  if (is_array($parsed) && sizeof($parsed) == 1 && isset($parsed['path'])) {
    return $input[1] . $prefix . $parsed['path'] . $input[3];
  }
}, $html);

echo $html;
于 2012-08-17T21:32:53.977 に答える
1

regex* と HTML の組み合わせがparse_url()役立つはずです。

// find all links in a page used within href="" or href='' syntax
$links = array();
preg_match_all('/href=(?:(?:"([^"]+)")|(?:\'([^\']+)\'))/i', $page_contents, $links);

// iterate through each array and check if it's "absolute"
$urls = array();
foreach ($links as $link) {
    $path = $link;
    if ((substr($link, 0, 7) == 'http://') || (substr($link, 0, 8) == 'https://')) {
        // the current link is an "absolute" URL - parse it to get just the path
        $parsed = parse_url($link);
        $path = $parsed['path'];
    }
    $urls[] = 'http://www.website.com/index.php?url=' . $path;
}

URL が絶対かどうかを判断するには、URL の先頭がhttp://https://;かどうかを確認するだけです。ftp://URL にやなどの他のメディアが含まれている場合tel:は、それらも処理する必要がある場合があります。

このソリューションは正規表現を使用して HTML を解析しますが、これはしばしば眉をひそめます。回避するには、 using[DOMDocument][2]に切り替えることができますが、問題がなければ追加のコードは必要ありません。

于 2012-08-17T21:33:45.940 に答える