удалите символы Unicode, но сохраните все специальные и английские символы с preg_replace

Я хочу использовать preg_replace чтобы удалить все символы Unicode, включая персидские символы из строки, и сохранить английский и все специальные символы. Я знаю, как это сделать:

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

Но я не хочу включать все специальные символы внутри []. Есть ли более короткий путь ?!

Чтобы удалить все, кроме символов, попадающих в базовый диапазон ASCII, вы можете использовать шаблон, подобный этому, чтобы соответствовать диапазону по кодам 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 (hex 20) в SPACE если вы не хотите, чтобы ваш вывод включают те специальные непечатаемые управляющие символы.

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