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

PHP去除特殊字符问题:禁用preg_replace/str_replace的解决方案

解决方案

方案1:正则保留允许的字符

既然无法预定义要去除的特殊字符,我们可以反过来只保留需要的字符(比如英文字母),用preg_replace匹配所有非字母的字符并替换为空。这种方式不需要提前知道所有要去除的字符,完全符合需求:

$name = "Test ½ ´ ¤ £ € ¨";
$clean_name = preg_replace('/[^a-zA-Z]/', '', $name);
echo $clean_name; // 输出:Test

如果需要保留空格,只需把正则表达式改为/[^a-zA-Z\s]/即可。

方案2:遍历字符过滤

如果你不想使用正则,可以通过遍历每个字符,检查其ASCII值是否属于英文字母范围(A-Z:65-90,a-z:97-122),只保留符合条件的字符:

$name = "Test ½ ´ ¤ £ € ¨";
$clean_name = '';
$char_count = mb_strlen($name);

for ($i = 0; $i < $char_count; $i++) {
    $current_char = mb_substr($name, $i, 1);
    $ascii_code = ord($current_char);
    // 判断是否为英文字母
    if (($ascii_code >= 65 && $ascii_code <= 90) || ($ascii_code >= 97 && $ascii_code <= 122)) {
        $clean_name .= $current_char;
    }
}

echo $clean_name; // 输出:Test

补充说明

你之前尝试的mb_convert_encoding和utf8_decode是编码转换工具,它们的作用是改变字符的编码格式,而非过滤特定字符,所以无法解决你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:59:54