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 父级。例如,如果用户以 HTML 形式输入http://www.espn.com,我希望 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

我会尝试使用它来解析 DOM。

http://simplehtmldom.sourceforge.net/

您可以为所有要注释掉的类设置一个类。然后使用此工具查找这些类并立即将它们全部注释掉。

于 2012-11-30T02:42:29.563 回答
0

为什么不使用正则表达式来查找和替换链接,它还可以处理可能昂贵的链接循环。这是匹配网址的正则表达式 http://daringfireball.net/2010/07/improved_regex_for_matching_urls

然后 preg_replace 用新的损坏的,或者用损坏的链接的注释掉的版本替换损坏的

或者,您可以通过 shell_exec 在目录上运行 grep,这样您就不必自己打开/读取和解析文件。

还可以使用正则表达式查看 php 中的这个匹配 url 模式

于 2012-11-30T03:34:02.580 回答
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 回答