Я пытаюсь удалить непечатаемые символы в строке, кроме некоторых символов, которые мне нужны.

$arr = ['Ù', 'é', '€'];
$string = "é & Ù @ ♣ ☂ % & € À";
$acceptedChars = implode('\\', $arr);
$string = preg_replace('/[^[:print:] ' . $acceptedChars . ']/', '', $string);

echo 'Test : ' . $string;

Моя проблема в том, что вместо замены нежелательных символов пустой строкой, установленной во втором параметре, я получаю следующее:

enter image description here

1
naspy971 16 Фев 2021 в 22:02

1 ответ

Лучший ответ

Чтобы удалить все символы, кроме печатаемых символов ASCII и $acceptedChars, вы можно использовать

$string = preg_replace('/[^ -~' . $acceptedChars . ']/u', '', $string);

См. демонстрацию PHP.

Шаблон -~ - это известный шаблон для соответствия любым печатаемым символам ASCII.

Модификатор u необходим для того, чтобы регулярное выражение работало со строками Unicode.

1
Wiktor Stribiżew 16 Фев 2021 в 19:19