preg_replace и file_get_contents

diab0583

Знаток
Регистрация
9 Июл 2007
Сообщения
199
Реакции
28
Здравствуйте!
Я получаю информацию от одной конторы.
Суть такая. На странице Для просмотра ссылки Войди или Зарегистрируйся есть лишний для меня текст - ссылка и текст на русском языке. К примеру Для просмотра ссылки Войди или Зарегистрируйся и Название сайта
Нужно получить содержимое страницы Для просмотра ссылки Войди или Зарегистрируйся
Найти и заменить (Для просмотра ссылки Войди или Зарегистрируйся и Название сайта) 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
PHP:
<?php
 
/**
* @author Extalionez
* @time 1.10.2012 16:32
*/
 
require 'snoopy.class.php'; // скачать файл с [URL]http://sourceforge.net/projects/snoopy/[/URL]
$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);
?>
Не проверенно!!! Но обязано работать по идее
 
Не работает:(. И в логах чисто.
А тут вроде попытка соеденения?
Код:
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 :(
 
Если по Вашим двум примерам, то нужно сделать так:
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; // если же конечный результат нужно вывести на экран
?>
 
  • Заблокирован
  • #5
Если по Вашим двум примерам, то нужно сделать так:
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; // если же конечный результат нужно вывести на экран
?>
зачем \ у точки?
Если через 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);
?>
 
зачем \ у точки?
Точка в регулярках это же любой символ, хотя и без экранирования тоже будет работать, т.к. точка под любой символ попадает :)
 
Спасибо всем!
Из двух вариантов собрал то, что заработало.

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
Всё намного проще - проблема в кодировке. установи кодировку файла, где находится
PHP:
$patterns[1] = "/Чужой заголовок /"; //кстати нафига тут пробел? уверен что он тут нужон тебе?
в utf-8. Правда если сайт не в utf-8, то это не поможет и понадобится юзать Для просмотра ссылки Войди или Зарегистрируйся, чтобы изменить кодировку полученного текста, в кодировку файла.

:ah: C пробелом я промахнулся. Кодировку выставлю. Сайт в utf-8.
С пробелом он у тебя не найдёт и естественно не заменит.
и в итоге....
должно же работать даже без iconv тогда!
 
Назад
Сверху