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

PHP无法删除em dash等特殊字符问题求助

解决UTF-8页面抓取后的特殊字符移除问题

嘿,我来帮你搞定这个字符清理的问题!你遇到的情况很典型——抓取UTF-8页面时偶尔会出现编码解析小问题,导致多余的特殊字符混进来。咱们一步步来解决:

问题分析

你提到的两个特殊字符:

  • em dash(十六进制E2 80 93):这是标准的UTF-8长破折号
  • Â(十六进制C3 82):这通常是UTF-8字符被错误当成单字节编码(比如ISO-8859-1)解析后产生的乱码残留

之前用mb_ereg_replace没成功,大概率是因为没有指定UTF-8编码模式,导致多字节字符匹配失效。

几种有效解决方案

方案1:用mb_ereg_replace并指定UTF-8编码

直接把两个目标字符加入正则,同时加上编码参数:

$v = mb_ereg_replace("[\xE2\x80\x93\xC3\x82]", "", $v, 'UTF-8');

或者直接匹配字符本身(更直观):

$v = mb_ereg_replace("–Â", "", $v, 'UTF-8');

方案2:用preg_replace加UTF-8修饰符/u

PHP的preg_replace需要/u修饰符来正确处理UTF-8多字节字符:

// 用十六进制转义匹配
$v = preg_replace('/[\x{E28093}\x{C382}]/u', '', $v);
// 或者直接匹配字符
$v = preg_replace('/–Â/u', '', $v);

方案3:用str_replace(最简单高效)

如果这两个字符是固定出现的,直接用str_replace替换更高效,不需要正则:

$v = str_replace(['–', 'Â'], '', $v);

验证结果

处理后你的变量$v应该会变成:25th March The Red Barn,完美移除了多余的特殊字符!

内容的提问来源于stack exchange,提问作者StripyTiger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:33:23