PHP Simple HTML DOM Parser 删除字符 / str_replace


PHP Simple HTML DOM Parser remove characters / str_replace

目前正在使用PHP Simple HTML DOM解析器,并遇到了一个非常奇怪的场景。

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

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由于某种原因无法正常工作。

有什么理由这行不通吗?

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

选择:

  1. 使用数字格式化程序::p arseCurrency http://php.net/manual/de/numberformatter.parsecurrency.php

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

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

  4. 您不需要为此preg_*函数

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;
  } 
}

无需再次循环。

有很多方法可以做到这一点。首先,您可以阅读多字节字符串函数

之后,例如,您可以使用带有 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