Возвращаемое значение без цифр и знаков препинания - PullRequest
0 голосов
/ 18 марта 2012

Я пытаюсь убрать цифры и знаки препинания из строки, оставляя только буквенные символы в SIMPLE HTML DOM, но безуспешно я попробовал несколько подходов и просто не могу их получить!

Пример строки: The Amazing Retard (2012) # 1 Выходная строка: Удивительная задержка

Я понимаю, что это для неопределенного метода, и я просмотрел несколько страниц для этого, однако я пугаю мозг за то, как включить метод. Любая помощь будет оценена. Я получаю ошибку

Неустранимая ошибка: вызов неопределенного метода simple_html_dom_node :: preg_replace () в /home/**/public_html/wp-content/themes/*/***.php по линии 123

Код выглядит следующим образом:

<?php

function scraping_comic()
{
    // create HTML DOM
    $html = file_get_html('http://page-to-scrape.com');

    // get block
    foreach($html->find('li.browse_result') as $article)
    {
        // get title
        $item['title'] = trim($article->find('h4', 0)->find('span',0)->outertext);
        // get title url
        $item['title_url'] = trim($article->find('h4', 0)->find('a.grid-hidden',0)->href);
        // get image
        $item['image_url'] = trim($article->find('img.main_thumb',0)->src);
        // get details
        $item['details'] = trim($article->find('p.browse_result_description_release', 0)->plaintext);
        // get sale info
        $item['on_sale'] = trim($article->find('.browse_comics_release_dates', 0)->plaintext);
        // strip numbers and punctuations
        $item['title2'] = trim($article->find('h4',0)->find('span',0)->preg_replace("/[^A-Za-z]/","",$item['title2'], 0)->plaintext);

        $ret[] = $item;

    }

    // clean up memory
    $html->clear();
    unset($html);

    return $ret;
}
// -----------------------------------------------------------------------------


$ret = scraping_comic();

if ( ! empty($ret))
{
    $scrape = 'http://the-domain.com';


    foreach($ret as $v)
    {

        echo '<p>'.$v['title2'].'</p>';
        echo '<p><a href="'.$scrape.$v['title_url'].'">'.$v['title'].'</a></p>';
        echo '<p><img src="'.$v['image_url'].'"></p>';
        echo '<p>'.$v['details'].'</p>';
        echo '<p> '.$v['on_sale'].'</p>';
    }
}
else { echo 'Could not scrape site!'; }
?>

Ответы [ 2 ]

0 голосов
/ 18 марта 2012

preg_replace является функцией php, а не членом класса simple_html_dom_node. Назовите это так:

$matches = preg_replace ($pattern, $replacement, mixed $subject);

http://php.net/manual/en/function.preg-replace.php

похоже, что ваши $pattern и replacement в порядке; вы просто передадите как $subject вход, который вы пытаетесь изменить.

например, это может быть тем, чего вы пытаетесь достичь:

$item['title2'] = 
  trim(preg_replace("/[^A-Za-z]/","",$article->find('h4',0)->find('span',0));
0 голосов
/ 18 марта 2012

Я думаю, что это из-за этой строки:

// strip numbers and punctuations
    $item['title2'] = trim($article->find('h4',0)->find('span',0)->preg_replace("/[^A-Za-z]/","",$item['title2'], 0)->plaintext);

написано так, это означает, что preg_replace - это метод вашего класса simple_html_dom_node, который не является стандартной функцией php.

вы можете иметь в своем классе что-то вроде execute_php_function ("a_php_function", anArrayOfArguments)

так что вы напишите что-то вроде этого:

// strip numbers and punctuations
    $item['title2'] = trim($article->find('h4',0)->find('span',0)->execute_php_function("preg_replace",anArrayOfArguments)->plaintext);
...