PHP简单的HTML DOM解析器删除字符/ str_replace

时间:2016-03-02 10:19:56

标签: php dom html-parsing str-replace

目前使用PHP Simple HTML DOM Parser并遇到一个非常奇怪的情况。

我有一组网址,我正在抓取并使用以下内容获取我需要的信息:

foreach($urls as $url) {
    $html = file_get_html($url);
    foreach($html->find('.product4block') as $article) {
    $item['title']     = $article->find('.product4text', 0)->plaintext;
    $item['link']    = $article->find('.product4text a', 0)->href;
    $item['price'] = $article->find('.product_price', 0)->plaintext;
    $data[] = $item;
  } 
}

然后我得到如下结果,这就是我需要的:

Array
(
    [0] => Array
        (
            [title] => title 0
            [link] => link 0
            [price] => £26.99 
        )

    [1] => Array
        (
            [title] => title 1
            [link] => link 1
            [price] => £27.99 
        )

    [2] => Array
        (
            [title] => title 2
            [link] => link 2
            [price] => £30.99 
        )
)

然后我遍历数据,将其添加到我的数据库中。

foreach($data as $result){  
  //insert data here//
}

然后我需要从价格中删除£符号。我只是在做一个像这样的str_replace:

$price = str_replace('£', '', $result['price']);

由于一些奇怪的原因,£没有被删除。我不确定它的dom解析器是否会导致问题,或者str_replace是否由于某种原因而无效。

为什么这不起作用?

3 个答案:

答案 0 :(得分:1)

嗯,str_replace()有效,请参阅http://ideone.com/C5O2LW

备选方案:

  1. 使用NumberFormatter :: parseCurrency http://php.net/manual/de/numberformatter.parsecurrency.php

  2. $output = (float) substr($input, strpos($input, "£") + 1);

  3. $output = floatval(ltrim($input,"£"));

  4. 您不需要preg_*个功能

答案 1 :(得分:0)

foreach($urls as $url) {
    $html = file_get_html($url);
    foreach($html->find('.product4block') as $article) {
    $item['title']     = $article->find('.product4text', 0)->plaintext;
    $item['link']    = $article->find('.product4text a', 0)->href;
    $item['price'] = $article->find('.product_price', 0)->plaintext;
    $data[] = $item;
  } 
}

替换为它将起作用

foreach($urls as $url) {
    $html = file_get_html($url);
    foreach($html->find('.product4block') as $article) {
    $item['title']     = $article->find('.product4text', 0)->plaintext;
    $item['link']    = $article->find('.product4text a', 0)->href;
    $item['price'] =  trim(str_replace('£', '',$article->find('.product_price', 0)->plaintext));
    $data[] = $item;
  } 
}

无需再次循环。

答案 2 :(得分:0)

有很多方法可以做到这一点。 首先,您可以阅读Multibyte String Functions

之后,您可以使用带有UTF-8选项的preg_replace函数。

最后,您还可以使用字符的ASCII编号。

第一个例子:

$tab['price'] = '£26.99';
$tab['price'] = preg_replace('#£#u', '', $tab['price']);

结果:

 Array
(
    [price] => 26.99
)

注意" u"就在正则表达式之后。

第二个例子:

echo ord('£'); // show 194
$price=str_replace(chr(194),'',$price);
echo $price; // show 26.99