Я хочу использовать 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);