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

时间:2015-04-18 19:32:18

标签: php preg-replace

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

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

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

1 个答案:

答案 0 :(得分:3)

要删除除基本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,终端铃声,退格等等。您可以考虑在{{1}开始使用ASCII 32(十六进制20)如果您不希望输出包含那些特殊的不可打印控制字符。

SPACE