PHP简单HTML DOM解析器删除字符/str_替换
目前正在使用PHP简单HTML DOM解析器,遇到了一个非常奇怪的场景 我有一组我正在抓取的URL,并使用以下内容获取我需要的信息: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
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()可以工作,请参见
备选方案:
$output=(float)substr($input,strpos($input,”)+1)代码>
$output=floatval(ltrim($input,”)代码>
preg.*
函数奇怪的是,做了一个快速检查,您的
str_replace
似乎对我有效,就像检查一样,您可以尝试更改str_replace
以删除价格字符串中的另一个字符。如果这消除了它,那么问题是两个
字符由于某种原因不相同,我不能100%确定这是否是由于某种形式的字符编码。