Как заменить все пробелы, которые на самом деле не являются пробелами, с регулярным выражением в PHP

У меня есть следующая строка, которую я хочу "очистить" от нескольких пробелов:

$string = "This is   a test string"; //Using utf8_decode

Не имеет большого значения, верно? Однако строка не очищается после использования:

$string = preg_replace('/\s+/', ' ', $string);

Потому что строка на самом деле выглядит так:

$test = "This is a  test string";

Итак, как я могу исправить эту проблему?

Благодарю.

Пожалуйста, я не хочу заменять символ str_replace('Â', '') или что-то

1 ответ

Решение

Вы можете использовать /u Модификатор UNICODE:

$string = preg_replace('/\s+/u', ' ', $string);

/u Модификатор позволяет механизму PCRE обрабатывать строки как строки UTF8 (путем включения PCRE_UTF8 глагол) и сделать классы сокращенных символов в шаблоне Unicode осведомленными (путем включения PCRE_UCP глагол)

Главное, что \s теперь будет соответствовать всем пробелам Юникода, а входная строка обрабатывается как строка Юникода.

Другие вопросы по тегам