将一个URL替换为另一个没有正则表达式的URL

时间:2013-02-15 19:20:43

标签: php

我正在尝试将数据库(wordpress)中的某些URL替换为另一个,但这很棘手,因为很多URL都是重定向的。我正在尝试使用重定向的URL替换URL,或者根据结果使用我选择的URL替换URL。我可以毫无问题地完成匹配,但我不能替换它。我已经尝试过str_replace,但它似乎没有替换URL。当我尝试preg_replace时,它会给出“警告:preg_replace():分隔符不能是字母数字或反斜杠”。任何人都可以用正确的方式指出我吗?

if(preg_match($url_regex,$row['post_content'])){
    preg_match_all($url_regex,$row['post_content'],$matches);

    foreach($matches[0] as $match){
        echo "{$row['ID']} \t{$row['post_date']} \t{$row['post_title']}\t{$row['guid']}";

        $newUrl = NULL;
        if(stripos($url_regex,'domain1') !== false || stripos($url_regex,'domain2') !== false || stripos($url_regex,'domain3') !== false){
            $match = str_replace('&','&',$match);

            $ch = curl_init();
            curl_setopt($ch,CURLOPT_URL,$match);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch, CURLOPT_HEADER, true);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            $html = curl_exec($ch);
            $newUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

            if(stripos($newUrl,'domain4') !== false)
                $newUrl = NULL;

        }
        else

        if($newUrl == NULL)
        {   $newUrl = 'http://www.mysite.com/';

        }
        echo "\t$match\t$newUrl";
        $content = str_replace($match,$newUrl,$row['post_content']); 
        echo "\t (" . strlen($content).")";
        echo "\n";

    }
}

1 个答案:

答案 0 :(得分:1)

这是使用Perl正则表达式执行此操作的方法。

$baesUrlMappings = array('/www.yoursite.com/i' => 'www.mysite.com', 
                         '/www.yoursite2.com/i' => 'www.mysite2.com',);

echo preg_replace(array_keys($baesUrlMappings), array_values($baesUrlMappings), 'http://www.yoursite.com/foo/bar?id=123');
echo preg_replace(array_keys($baesUrlMappings), array_values($baesUrlMappings), 'http://www.yoursite2.com/foo/bar?id=123');

http://codepad.viper-7.com/2ne7u6

请阅读手册!你应该能够弄清楚这一点。