1

Webサイトからコンテンツをフェッチするスクリプトがあります。やりたいのは、そのすべてのリンクを変更することです。仮定する:

$html = str_get_html('<h2 class="r"><a class="l" href="http://www.example.com/2009/07/page.html" onmousedown="return curwt(this, 'http://www.example.com/2009/07/page.html')">SEO Result Boost <b> </b></a></h2>');

それで、このようにそれを修正または書き直すことは可能ですか>

<h2 class="r"><a class="l" href="http://www.site.com?http://www.example.com/2009/07/page.html">SEO Result Boost <b> </b></a></h2>


マニュアルを読みましたが、理解する方法がわかりません(http://simplehtmldom.sourceforge.net/#fragment-12

それは可能ですか、何かアイデアはありますか?

4

1 に答える 1

5

関連する質問への回答が機能すると仮定すると、

SimpleHTMLDOMで次の操作を使用できるはずです

$site = "http://siteyourgettinglinksfrom.com";
$doc = str_get_html($code);
foreach ($doc->find('a[href]') as $a) {
$href = $a->href;
if (/* $href begins with a absolute URL path */) {
    $a->href = 'http://www.site.com?'.$href;
}
else{ /* $href begins with a relative path */        
    $a->href = 'http://www.site.com?'.$site.$href;
}

}
$code = (string) $doc;

また

PHPのネイティブDOMライブラリを使用する:

$site = "http://siteyourgettinglinksfrom.com";
$doc = new DOMDocument();
$doc->loadHTML($code);
$xpath = new DOMXpath($doc);
foreach ($xpath->query('//a[@href]') as $a) {
$href = $a->getAttribute('href');
if (/* $href begins with a absolute URL path */) {
    $a->setAttribute('href', 'http://www.site.com?'.$href);
}
else{ /* $href begins with a relative path */
    $a->setAttribute('href', 'http://www.site.com?'.$site.$href);
}
}
$code = $doc->saveHTML();

$ hrefの確認:

ほとんどのサイトは相対リンクを使用しているため、相対リンクを確認し、コンテンツを取得するサイトのアドレスを前に追加します。(これは、正規表現マッチャーがあなたの親友になる場所です)

相対リンクの場合は、リンクを取得しているサイトへの絶対パスを前に追加します

  'http://www.site.com?'.$site.$href

絶対リンクの場合は、相対リンクを追加するだけです

  'http://www.site.com?'.$href

リンクの例:

サイト相対:/images/picture.jpg

相対的な文書:../images/picture.jpg

絶対:http://somesite.com/images/picture.jpg

注:「ドキュメント相対」リンクを処理する場合は、現在どのディレクトリにいるかを知る必要があるため、ここで行う必要のある作業がもう少しあります。サイト相対リンクは、次の場合に適しています。リンクを取得しているサイトのルートフォルダがあります)

于 2012-09-06T17:28:54.693 に答える