0

壊れたリンクの「検索と置換」システムを実装しようとしています。問題は、一部のリンクには代替がないことです。そのため、特定の li 要素をコメントアウトする必要があります。これを行うには、以下のコードを参照してください。(私は HTML フォームから始めています)。

<?php

$brokenlink = $_POST['brokenlink'];
$newlink = $_POST['newlink'];

$brokenlink = '"' . $brokenlink . '"';
$newlink = '"' . $newlink . '"';

$di = new RecursiveDirectoryIterator('hugedirectory');
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
  //  echo $filename . ' - ' . $file->getSize() . ' bytes <br/>';

    $filetoedit = file_get_contents($file);
    if(strpos($filetoedit, $brokenlink)) {

    echo $brokenlink . "found in " . $filename . "<br/>";
    $filetoedit = str_replace($brokenlink, $newlink, $filetoedit);
    file_put_contents($filename, $filetoedit);

    }

}

?>

私が達成したいのはこれです: URL がある場合、その li 親を見つけられるようにしたいです。たとえば、ユーザーがhttp://www.espn.comを HTML フォームに入力した場合、PHP が以下のコードをコメントアウトできるようにしたいのですが、PHP がサーバー上でこの要素を見つけられるようにしたいと考えています。

 <li><a href="http://www.espn.com" target="_blank" data-new="20120627">Sports</a></li>

これを次のように置き換えます。

 <!-- <li><a href="http://www.espn.com" target="_blank" data-new="20120627">Sports</a></li> -->

これは可能ですか?ありがとう。

4

3 に答える 3

0

リンクの検索と置換に regexp を使用しないのはなぜでしょうか。これはおそらくコストのかかるリンクのループも処理してくれるでしょう。これは、一致する URL の正規表現です http://daringfireball.net/2010/07/improved_regex_for_matching_urls

次に preg_replace 壊れたものを新しいものに置き換えるか、壊れたものをコメントアウトされたバージョンの壊れたリンクに置き換えます

または、shell_exec を介してディレクトリで grep を実行することもできます。この方法では、ファイルを自分で開いたり、読み取ったり、解析したりする必要はありません。

また、正規表現を使用してphpでこの一致URLパターンを見てください

于 2012-11-30T03:34:02.580 に答える
0

これを使用してDOMを解析してみます。

http://simplehtmldom.sourceforge.net/

コメントアウトしたいすべてのクラスにクラスを設定できます。次に、このツールを使用してそれらのクラスを見つけ、一度にすべてコメントアウトします。

于 2012-11-30T02:42:29.563 に答える
0

ファイル コンテンツを使用してDOMDocumentを作成し、 XPathを使用して壊れたリンク ノードを検索することをお勧めします。

$dom = new DOMDocument();
@$dom->loadHTML($filetoedit);

$xpath = new DOMXPath($dom);

$nodes = $xpath->query('//li/a[@href="' . $brokenlink . '"]');
for ($i = 0; $i < $nodes->length; $i++) {
    $node = $nodes->item($i);
    // Do whatever you want here
} 
于 2012-11-30T03:50:15.963 に答える