Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: preg_replace_callback - как вызвать ф-ю класса с дополнительными параметрами?
 
 автор: Alba   (25.05.2009 в 21:04)   письмо автору
 
 

Всем привет!

Делаю небольшой парсер страниц. Есть класс, у него есть методы которые скачивают страницу, есть методы которые обрабатывают скаченные страницы...
Сейчас мне нужно заменить все картинки в скаченных страницах на картинки с правильными путями.... Делаю это с помошью регулярок, использую ф-ю preg_replace_callback. Не получается вызвать callback-функцию replaceImg... Помогите пожалуйста, уже весь день парюсь...

Тот код что я привел ниже, не работает, но думаю смыл понятен того что я хочу сделать....


class MyClass {

    function replaceImg($arr, $url){
        // тут код который меняет src картинок на переданный $url
    }

    function getPage(){
        // тут скачиваем страницу и находим все имагесы регуляркой
        // следующий код не работает, регулярка правильная, проверял... не могу вызвать ф-ю replaceImg

        $callback = create_function('$arr, &$this',"
            return call_user_func_array(array(&$this, 'replaceImg'), array(\$arr, '$url'));
        ");

        $content = preg_replace_callback("/<(img|image)[\s]+[^>]*src=['\"]?([^'\"\s>]+)['\"]?[^>]*>/is", $callback, $content);
      }
}

  Ответить  
 
 автор: Alba   (25.05.2009 в 22:36)   письмо автору
 
   для: Alba   (25.05.2009 в 21:04)
 

Если вы думаете, что пост уже давно висит и потому на него не стоит отвечать, то я вам скажу - я все еще надеюсь услышать ответ! своих мыслей не осталось, метод тыка уже не работает... :-)

  Ответить  
 
 автор: VITtek   (25.05.2009 в 23:13)   письмо автору
 
   для: Alba   (25.05.2009 в 21:04)
 

$callback - тут ошибка (такого оригинального ОПП, я давно не видел ))))
[0] - полное вхождение шаблона

  Ответить  
 
 автор: Alba   (25.05.2009 в 23:20)   письмо автору
 
   для: VITtek   (25.05.2009 в 23:13)
 

я знаю что ошибка...
подскажите как сделать без ошибки?

У меня не получается передать дополнительный параметр $url в функцию replaceImg

  Ответить  
 
 автор: Alba   (25.05.2009 в 23:27)   письмо автору
 
   для: Alba   (25.05.2009 в 23:20)
 

Вот что нашел на http://ua2.php.net/call_user_func_array


<?php
class MyClass
{

  function 
preg_callback_url($matches)
  {
    
//var_dump($matches);
    
$url $matches[1].$matches[2];
    
$text '';
    
$pos strpos($url,' ');
    if (
$pos!==FALSE) {
      
$text trim(substr($url,$pos+1));
      
$url substr($url,0,$pos);
    }
    return 
'<a href="'.$url.'" rel="nofollow">'.(($text!='') ? $text $url).'</a>';
  }

  function 
ParseText($text)
  {
    return 
preg_replace_callback('/\[(http|https|ftp)(.*?)\]/iS',array( &$this'preg_callback_url'), $text);
  }

}
?>


как переделать по мои нужды? т.е. надо в function preg_callback_url($matches) добавить еще один параметр - function preg_callback_url($matches, $url)

  Ответить  
 
 автор: VITtek   (26.05.2009 в 13:25)   письмо автору
 
   для: Alba   (25.05.2009 в 23:27)
 

Изначально выбор в сторону preg_replace_callback, не технологичный... что бы поменять ссылку, куча кода написал. Прогнал бы через счётчик for preg_replace

  Ответить  
 
 автор: GLobalinfo   (30.11.2010 в 14:04)
 
   для: Alba   (25.05.2009 в 21:04)
 

Если ты хочеш использовать функцию с определенного класса попробуй сделать так:

preg_replace_callback("/<(img|image)[\s]+[^>]*src=['\"]?([^'\"\s>]+)['\"]?[^>]*>/is", "MyClass::имяФункцииЗамены", $content);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования