UTF-8字符串上的Parsefloat返回NaN

时间:2014-02-03 19:59:48

标签: javascript utf-8

我正在开发一个应用程序,我正在使用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。

2 个答案:

答案 0 :(得分:1)

这是一个欧元符号。糟糕!

http://www.ascii-code.com/

将其添加到您的代码中以帮助您进行调试。

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, ''));

确保在执行此操作之前用点替换逗号。