|
|
|
| Всем привет!
Делаю небольшой парсер страниц. Есть класс, у него есть методы которые скачивают страницу, есть методы которые обрабатывают скаченные страницы...
Сейчас мне нужно заменить все картинки в скаченных страницах на картинки с правильными путями.... Делаю это с помошью регулярок, использую ф-ю 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 в 21:04)
| | Если вы думаете, что пост уже давно висит и потому на него не стоит отвечать, то я вам скажу - я все еще надеюсь услышать ответ! своих мыслей не осталось, метод тыка уже не работает... :-) | |
|
|
|
|
|
|
|
для: Alba
(25.05.2009 в 21:04)
| | $callback - тут ошибка (такого оригинального ОПП, я давно не видел ))))
[0] - полное вхождение шаблона | |
|
|
|
|
|
|
|
для: VITtek
(25.05.2009 в 23:13)
| | я знаю что ошибка...
подскажите как сделать без ошибки?
У меня не получается передать дополнительный параметр $url в функцию replaceImg | |
|
|
|
|
|
|
|
для: 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) | |
|
|
|
|
|
|
|
для: 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); | |
|
|
|