preg_replace и file_get_contents

Тема в разделе "Как сделать...", создана пользователем diab0583, 1 окт 2012.

  1. diab0583

    diab0583

    Регистр.:
    9 июл 2007
    Сообщения:
    199
    Симпатии:
    25
    Здравствуйте!
    Я получаю информацию от одной конторы.
    Суть такая. На странице Перейти по ссылке и Название сайта
    Нужно получить содержимое страницы Перейти по ссылке
    Найти и заменить (Перейти по ссылке и Название сайта) moy-site.ru и Название моего сайта.
    Я нашёл что-то подобное, но как собрать и довести до ума?
    Код:
    1.
    <?php echo file_get_contents("http://domen.com/index.php");?>
    2.
    <?php
    $string = "The quick brown fox jumped over the lazy dog.";
     
    $patterns[0] = "/quick/";
    $patterns[1] = "/brown/";
    $patterns[2] = "/fox/";
     
    $replacements[2] = "bear";
    $replacements[1] = "black";
    $replacements[0] = "slow";
     
    echo preg_replace($patterns, $replacements, $string);
    ?>
    
     
  2. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    PHP:
    <?php
     
    /**
    * @author Extalionez
    * @time 1.10.2012 16:32
    */
     
    require 'snoopy.class.php'// скачать файл с Перейти по ссылке
    $page = new Snoopy;
    $page->fetch('http://domen.com/index.php');
    $sourse $page->results;
    $patterns = array();
        
    $patterns[0] = '/http:\/\/chuzhoy-site.ru/';
        
    $patterns[1] = '/Название сайта/';
    $replacements = array();
        
    $replacements[0] = 'moy-site.ru';
        
    $replacements[1] = 'Название моего сайта';
    $result preg_replace($patterns$replacements$sourse);
    ?>
    Не проверенно!!! Но обязано работать по идее
     
    diab0583 нравится это.
  3. diab0583

    diab0583

    Регистр.:
    9 июл 2007
    Сообщения:
    199
    Симпатии:
    25
    Не работает:(. И в логах чисто.
    А тут вроде попытка соеденения?
    Код:
    class Snoopy
    {
        /**** Public variables ****/
       
        /* user definable vars */
     
        var $host            =    "[B]www.php.net[/B]";        // host name we are connecting to
        var $port            =    80;                    // port we are connecting to
        var $proxy_host        =    "";                    // proxy host to use
        var $proxy_port        =    "";                    // proxy port to use
        var $proxy_user        =    "";                    // proxy user to use
        var $proxy_pass        =    "";                    // proxy password to use
        
    Я в php 0 :(
     
  4. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    Если по Вашим двум примерам, то нужно сделать так:
    PHP:
    <?php
     
    $html 
    file_get_contents("http://domen.com/index.php");
     
    $patterns[0] = "/domen\.com/";
    $patterns[1] = "/Заголовок их/";
     
    $replacements[0] = "moy-site.ru";
    $replacements[1] = "Заголовок ваш";
     
    $html  preg_replace($patterns$replacements$html);
    echo 
    $html// если же конечный результат нужно вывести на экран
    ?>
     
    diab0583 нравится это.
  5. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    зачем \ у точки?
    Если через snoopy не работает, то пойдём напролом. так точно должно работать
    PHP:
    <?php
     
    /**
    * @author Extalionez
    * @time 1.10.2012 16:32
    */
    $sourse file_get_contents("http://domen.com/index.php");
    $patterns = array();
        
    $patterns[0] = '/http:\/\/chuzhoy-site.ru/';
        
    $patterns[1] = '/Название сайта/';
    $replacements = array();
        
    $replacements[2] = 'moy-site.ru';
        
    $replacements[1] = 'Название моего сайта';
    $result preg_replace($patterns$replacements$sourse);
    ?>
     
    diab0583 нравится это.
  6. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    Точка в регулярках это же любой символ, хотя и без экранирования тоже будет работать, т.к. точка под любой символ попадает :)
     
    diab0583 нравится это.
  7. diab0583

    diab0583

    Регистр.:
    9 июл 2007
    Сообщения:
    199
    Симпатии:
    25
    Спасибо всем!
    Из двух вариантов собрал то, что заработало.

    PHP:
    <?php
     
    $html 
    file_get_contents("domen.com");
    $patterns = array();
    $patterns[0] = "/domen\.com/";
    $patterns[1] = "/Чужой заголовок /";
    $replacements = array();
    $replacements[0] = "moy-domen.ru ";
    $replacements[1] = "Мой заголовок";
     
    $html  preg_replace($patterns$replacements$html);
    echo 
    $html// если же конечный результат нужно вывести на экран
    ?>
    Но этот код не заменяет русские буквы.
    Почитал что-то про локаль и огромных размеров регулярки , но не разобрался.
     
  8. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    Всё намного проще - проблема в кодировке. установи кодировку файла, где находится
    PHP:
    $patterns[1] = "/Чужой заголовок /"//кстати нафига тут пробел? уверен что он тут нужон тебе?
    в utf-8. Правда если сайт не в utf-8, то это не поможет и понадобится юзать Перейти по ссылке, чтобы изменить кодировку полученного текста, в кодировку файла.

    С пробелом он у тебя не найдёт и естественно не заменит.
    и в итоге....
    должно же работать даже без iconv тогда!
     
    diab0583 нравится это.