删除 unicode 字符,但保留所有特殊字符和英文字符 preg_replace

remove unicode characters but keep all special and English characters with preg_replace

我想使用 preg_replace 从字符串中删除所有 unicode 字符,包括波斯语字符,并保留英语和所有特殊字符。我知道的方法是:

preg_replace('/[^<>()/\* a-zA-Z0-9_.-]/u', '', $string);

但是,我真的不想在 [] 中包含所有特殊字符。有没有更短的方法?!

要删除除基本 ASCII 范围内的字符以外的所有字符,您可以使用模式 similar to this 通过 HEX 代码匹配范围。

// Given a string with characters in and outside ASCII:
$s = "abcde啅cde衸xtzሴbb()*&bԴ";

// Match HEX 00-7F and remove characters outside that
// by inverting with ^
echo preg_replace('/[^\x00-\x7f]/', '', $s);
// Prints:
// abcdecdextzbb()*&b

使用 HEX 00-7F 还将包括 ASCII 范围的开始,因此涵盖 NUL、终端铃、退格等。您可以考虑从 ASCII 32(十六进制 20)开始 SPACE 如果您不希望输出包含那些特殊的不可打印控制字符。

echo preg_replace('/[^\x20-\x7f]/', '', $s);