使用regex或DOMDocument替换最后一个char(字符串)

时间:2016-09-20 09:46:53

标签: php regex domdocument

我正在使用一个小脚本将绝对链接转换为相对链接。它正在发挥作用,但需要改进。不知道如何继续。请查看用于此目的的部分脚本。

脚本:

public function links($path) {

    $old_url = 'http://test.dev/'; 

    $dir_handle = opendir($path);
    while($item = readdir($dir_handle)) {
        $new_path = $path."/".$item;
        if(is_dir($new_path) && $item != '.' && $item != '..') {
            $this->links($new_path);
        }
        // it is a file
        else{

            if($item != '.' && $item != '..')
            {
                $new_url = '';
                $depth_count = 1;
                $folder_depth = substr_count($new_path, '/');
                while($depth_count < $folder_depth){
                    $new_url .= '../';
                    $depth_count++;


                }

                $file_contents = file_get_contents($new_path);

                $doc = new DOMDocument;
                @$doc->loadHTML($file_contents);

                foreach ($doc->getElementsByTagName('a') as $link) {
                        if (substr($link, -1) == "/"){
                            $link->setAttribute('href', $link->getAttribute('href').'/index.html');
                        }

                    }

                $doc->saveHTML();
                $file_contents = str_replace($old_url,$new_url,$file_contents);
                file_put_contents($new_path,$file_contents);

            }
        }
    }

}

正如您所看到的,我在while loop内添加DOMDocument,但它不起作用。我想在这里实现的是为index.html中的每个链接添加该链接中的最后一个字符是/

我做错了什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

这是你想要的吗?

$file_contents = file_get_contents($new_path);

$dom = new DOMDocument();
$dom->loadHTML($file_contents);

$xpath = new DOMXPath($dom);
$links = $xpath->query("//a");

foreach ($links as $link) {
    $href = $link->getAttribute('href');
    if (substr($href, -1) === '/') {
        $link->setAttribute('href', $href."index.html");
    }
}

$new_file_content = $dom->saveHTML();
# save this wherever you want

a demo on ideone.com

<小时/> 提示:您对$dom->saveHTML()的调用无处可寻(即没有变量捕获输出)。