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

PHP移除字符串中的度符号:解决Unicode显示异常问题

解决方案

你的问题出在两处:一是原正则/[^\x20-\x7E]/只能过滤实际的非ASCII字符,但输出里的\u00b0是ASCII组成的转义文本(\、u、数字都是ASCII范围内),所以不会被过滤;二是度符号可能存在多种Unicode变体(比如U+00B0、U+2103、U+2109等),需要统一匹配替换。

根据你的场景,提供两种针对性方案:

方案1:直接匹配转义序列\u00b0

如果数据库存储的是带转义的\u00b0文本(如示例输出所示),直接正则匹配该转义字符串并替换为空格:

foreach ($video as $desc) {
    if (preg_match('/\/(.*?)"E/', $desc, $match) == 1) {
        // 匹配大小写的\u00b0转义序列,替换为空格
        $test = preg_replace('/\\\u00b0/i', ' ', $match[1]);
        echo $test;
    }
}

方案2:解析转义序列后替换所有度符号变体

如果需要兼容实际Unicode度符号(而非转义文本),先把转义序列解析为真实Unicode字符,再匹配所有常见度符号替换:

foreach ($video as $desc) {
    if (preg_match('/\/(.*?)"E/', $desc, $match) == 1) {
        // 解析转义序列为真实Unicode字符
        $decoded = json_decode('"' . $match[1] . '"');
        // 匹配所有度相关Unicode符号(U+00B0普通度、U+2103摄氏度、U+2109华氏度等)
        $test = preg_replace('/[\x{00B0}\x{2103}\x{2109}\x{00BA}]/u', ' ', $decoded);
        echo $test;
    }
}

补充说明

如果替换后还需要移除其他非ASCII字符,可以在替换度符号后追加原过滤逻辑:

$test = preg_replace('/[^\x20-\x7E]/', '', $test);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:35:16