我想使用preg_replace
从字符串中删除包括波斯字符在内的所有unicode字符,并保留英语和所有特殊字符。我知道这样做的方式是:
preg_replace('/[^<>()/\* a-zA-Z0-9_.-]/u', '', $string);
但是,我真的不想在[]中包含所有特殊字符。有没有更短的方式?!
答案 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