You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

str_replace()无法去除空格:爬取价格无法计入购物车总额

问题分析与解决

核心问题

你的代码里str_replace(' ', '', $decodeprijs)没生效,大概率是因为爬取到的不是普通空格,而是网页常见的非断空格( ,UTF-8编码为\xc2\xa0),普通的空格替换无法识别它。另外代码里多余的json_encode+json_decode操作完全没必要,还可能引入额外问题。

修复步骤

  1. 移除多余的JSON编解码流程,直接使用原始的价格字符串
  2. 替换所有空白字符(包括普通空格、非断空格等)

修复后的代码

// 直接获取原始价格,跳过无意义的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:15:50