Я хотел бы очистить строку, оставив только символы ASCII НО Кроме того, я хотел бы сохранить смайлики!
В настоящее время у нас есть тупой подход белого списка:
preg_replace('/[^(\x20-\x7F,☠,♥)]*/','', $text);
Есть ли способ пропустить большую группу смайликов через фильтр?
В настоящее время наша конфигурация php не имеет mbstring
значения установлены. например мы не иметь mbstring.internal_encoding = UTF-8
, Не уверен, если это имеет значение или нет.
Первый, (
, ,
, )
не имеют особого значения в классе символов, и если вы используете квантификатор *
, ваш шаблон будет успешным в каждой позиции в строке (с пустым соответствием).
Если вы хотите сохранить эмодзи, вам нужно всего лишь поместить их в класс отрицанных персонажей. Очевидно, вместо того, чтобы помещать их один за другим в класс символов, используйте диапазоны, например так:
/[^\x20-\x7F-☠♥]+/u
Вы можете выбрать интересующие вас диапазоны здесь: https://en.wikipedia.org/wiki/Emoji
Обратите внимание, что поскольку вы имеете дело с символами Юникода, вы должны использовать модификатор u.
Других решений пока нет …