我正在开发一个应用程序,我正在使用Simple HTML DOM Parser(http://simplehtmldom.sourceforge.net/)从网站上抓取数据
在我正在抓取的其中一个网站上,我必须将一些数据转换为UTF-8,因为该网站使用的是iso-8859-1编码。我喜欢这个:
'price' => mb_convert_encoding($element->childNodes(5)->plaintext, "UTF-8"),
我已将数据转换为JSON以在我的JS文件中收集它。在这里,我想使用parseFloat将“price”数据转换为整数:
parseFloat(value.price);
当我对我在Php中转换为UTF-8的值执行此操作时,我得到一个“NaN”。有办法解决这个问题吗?
编辑:
我在这里上传了这个东西:http://leondew.it/temp。输入卡号,即“Mutavault”,等待搜索完成并观看控制台。
此:
var_dump(mb_convert_encoding($element->childNodes(5)->plaintext, "UTF-8"));
结果:字符串(13)“20,00”
而且:
var_dump($element->childNodes(5)->innertext);
结果: 20,00& nbsp,这个奇怪的 角色弄乱了我的JSON。
答案 0 :(得分:1)
这是一个欧元符号。糟糕!
将其添加到您的代码中以帮助您进行调试。
var parsed = parseFloat(cardValue.price);
if (isNaN(parsed)) {
for (var i = 0; i < cardValue.price.length; i++) {
console.log(cardValue.price.charCodeAt(i));
}
}
在尝试解析之前,您应该使用一些简单的RegEx删除任何您不期望的垃圾。
cardValue.price.replace(/[^,.0-9]/g, '')
答案 1 :(得分:1)
我唯一能想到解决问题的方法是使用.replace()
去除所有非数字字符(或点)。
所以它会是:
parseFloat(value.price.replace(/[^\d.]/g, ''));
确保在执行此操作之前用点替换逗号。