目前正在使用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
选择:
-
使用数字格式化程序::p arseCurrency http://php.net/manual/de/numberformatter.parsecurrency.php
-
$output = (float) substr($input, strpos($input, "£") + 1);
-
$output = floatval(ltrim($input,"£"));
-
您不需要为此
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