str_replace()无法去除空格:爬取价格无法计入购物车总额
问题分析与解决
核心问题
你的代码里str_replace(' ', '', $decodeprijs)没生效,大概率是因为爬取到的不是普通空格,而是网页常见的非断空格( ,UTF-8编码为\xc2\xa0),普通的空格替换无法识别它。另外代码里多余的json_encode+json_decode操作完全没必要,还可能引入额外问题。
修复步骤
- 移除多余的JSON编解码流程,直接使用原始的价格字符串
- 替换所有空白字符(包括普通空格、非断空格等)
修复后的代码
// 直接获取原始价格,跳过无意义的JSON编解码 $decodeprijs = $articles[$i]->prijs; // 用正则替换所有空白类字符(含普通空格、非断空格、制表符等) $nospace = preg_replace('/\s+/', '', $decodeprijs); $nocomma = str_replace(',', '.', $nospace); $nohyphen = str_replace('-', '0', $nocomma); $officialprijs = $nohyphen; dd($officialprijs);
备选方案(精准替换非断空格)
如果确定只有非断空格问题,也可以直接指定替换字符:
$decodeprijs = $articles[$i]->prijs; // 同时替换普通空格和非断空格 $nospace = str_replace([" ", "\xc2\xa0"], '', $decodeprijs); $nocomma = str_replace(',', '.', $nospace); $nohyphen = str_replace('-', '0', $nocomma); $officialprijs = $nohyphen; dd($officialprijs);
为什么原代码无效?
- 网页渲染时常用非断空格( )来防止文字换行,它的ASCII编码是160,和普通空格(ASCII 32)不是同一个字符,所以
str_replace(' ', ...)找不到它。 - 多余的
json_encode+json_decode不仅没作用,还可能把原始字符串转义成带引号的格式,反而增加处理难度。
内容的提问来源于stack exchange,提问作者Stef Verniers
相关产品推荐
相关产品推荐

