目前使用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是否由于某种原因而无效。
为什么这不起作用?
答案 0 :(得分:1)
嗯,str_replace()有效,请参阅http://ideone.com/C5O2LW
备选方案:
使用NumberFormatter :: parseCurrency http://php.net/manual/de/numberformatter.parsecurrency.php
$output = (float) substr($input, strpos($input, "£") + 1);
$output = floatval(ltrim($input,"£"));
此
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