Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP简单HTML DOM解析器删除字符/str_替换_Php_Dom_Html Parsing_Str Replace - Fatal编程技术网

PHP简单HTML DOM解析器删除字符/str_替换

PHP简单HTML DOM解析器删除字符/str_替换,php,dom,html-parsing,str-replace,Php,Dom,Html Parsing,Str Replace,目前正在使用PHP简单HTML DOM解析器,遇到了一个非常奇怪的场景 我有一组我正在抓取的URL,并使用以下内容获取我需要的信息: foreach($urls as $url) { $html = file_get_html($url); foreach($html->find('.product4block') as $article) { $item['title'] = $article->find('.product4text', 0)-&g

目前正在使用PHP简单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_替换,如下所示:

$price = str_replace('£', '', $result['price']);
由于某种奇怪的原因,
没有被删除。我不确定是dom解析器引起了问题,还是str_replace由于某种原因不能工作

有什么理由不起作用吗

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

无需再次循环。

有很多方法。 首先,你可以阅读

之后,您可以使用preg_replace functions with UTF-8选项

最后,还可以使用字符的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
str_replace()可以工作,请参见

备选方案:

  • 使用NumberFormatter::parseCurrency

  • $output=(float)substr($input,strpos($input,”)+1)

  • $output=floatval(ltrim($input,”)

  • 对此,您不需要
    preg.*
    函数


  • 奇怪的是,做了一个快速检查,您的
    str_replace
    似乎对我有效,就像检查一样,您可以尝试更改
    str_replace
    以删除价格字符串中的另一个字符。如果这消除了它,那么问题是两个
    字符由于某种原因不相同,我不能100%确定这是否是由于某种形式的字符编码。