Как удалить все непечатаемые символы в строке и сохранить некоторые из них?
Я использую это
$string = preg_replace('/[\x00-\x1F\x7F\xA0]/u', '', $string);
Это регулярное выражение по этой ссылке PHP: Как удалить все непечатаемые символы в строке?
Регулярное выражение удаляет \n
но я хотел бы сохранить это. Что я должен делать?
Я думаю \n
является 000A
, так что я попробовал что-то вроде этого (это заставит все регулярные выражения перестать работать)$string = preg_replace('/[\x00-\x1F\x7F\xA0[ˆ\x0A]]/u', '', $string);
Я ценю любую помощь.
3 ответа
Решение
Диапазон \x00-\x1F
содержит \x0A
,
Вы должны разделить этот диапазон.
$string = preg_replace('/[\x00-\x09\x0B-\x1F\x7F\xA0]/u', '', $string);
Минимальное изменение исходного выражения:
/(?!\n|\r)[\x00-\x1F\x7F-\xFF]/u
Использует отрицательный прогноз, чтобы не совпадать с переводами строки и возвратом каретки.
Попробуй это
[\x00-\x1F\x7F\xA0[^\x0A^\x0d]]
Пояснение:
x0A - перевод строки (\ n)
x0d - возврат каретки (\r)
Пример: