Отфильтруйте все типы пробела в PHP

Я знаю, что существует много типов пространства (длинный пробел, короткий пробел, тонкое пространство, неразрывное пространство, и т.д.), но, все они, которые я отослал, имеют объекты HTML (по крайней мере, htmlentities PHP () возвращают что-то как  .

Но, что относительно тех пробелов, которые не имеют никаких объектов HTML?
Пример: [URL в качестве примера, не допустимый больше]
Посмотрите на псевдоним этой учетной записи. Это имеет многих "" (пробелы) в передней стороне, которые видимы для нас (этого не происходит с  ).

Я уже попробовал фильтр регулярными выражениями, с помощью \x Escape, фильтр с str_replace (), с пространством как аргумент и никакая удача вообще!

У Вас есть какое-либо предложение о том, как отфильтровать ВСЕ типы пробела?

5
задан Nuno 8 May 2019 в 08:58
поделиться

3 ответа

\ s по умолчанию, не будет соответствовать пробельным символам со значениями больше 128. Чтобы получить их, вы можете вместо этого эффективно использовать другие UTF- 8-знающие последовательности.


(Стандартный отказ от ответственности: я просматриваю исходный код PCRE, чтобы составить списки ниже, я могу пропустить символ или ввести что-то неправильно. Пожалуйста, простите меня.)

\ p {Zs} соответствует:

  • U + 0020 Пробел
  • U + 00A0 Непрерывный пробел
  • U + 1680 Огамовый пробел
  • U + 180E Монгольский разделитель гласных
  • U + 2000 En quad
  • U + 2001 Em quad
  • U + 2002 Пространство En
  • U + 2003 Пространство Em
  • U + 2004 Пространство трех на em
  • U + 2005 Пространство четыре на em
  • U + 2006 Шесть на em пространство
  • U + 2007 пространство фигуры
  • U + 2008 пространство пунктуации
  • U + 2009 тонкое пространство
  • U + 200A пространство волос
  • U + 202F узкое неразрывное пространство
  • U + 205F Среднее математическое пространство
  • U + 3000 Идеографическое пространство

\ h (Горизонтальный пробел) совпадает с тем же, что и \ p {Zs} выше, плюс

  • U + 0009 Горизонтальная вкладка .

Аналогичным образом существует несколько вариантов сопоставления вертикальных пробелов.

\ p {Zl} соответствует разделителю строк U + 2028.

\ p {Zp} соответствует U + 2029 Разделитель абзацев.

\ v (вертикальный пробел) соответствует \ p {Zl} , \ p {Zp} и следующему

  • U + 000A Linefeed
  • U + 000B Вертикальная табуляция
  • U + 000C Formfeed
  • U + 000D Возврат каретки
  • U + 0085 Следующая строка

Возврат к началу в режиме UTF-8 (т.е.с использованием модификатора шаблона u ) \ s будет соответствовать любому символу, который соответствует \ p {Z} (то есть любому, что \ p {Zs} , \ p {Zl} и \ p {Zp} будут соответствовать), плюс

  • U + 0009 Горизонтальная вкладка
  • U + 000A Перевод строки
  • U + 000C Formfeed
  • U + 000D Возврат каретки

Короче говоря (держу пари, вы читали все вышеперечисленное, не так ли?), Вы можете использовать \ s но убедитесь, что вы находитесь в режиме UTF-8, например / \ s / u . Для практического использования, чтобы отфильтровать совпадающие пробельные символы из строки, вы должны сделать что-то вроде

$new_string = preg_replace('/\s/u', '', $old_string);

Наконец, если вы действительно заботитесь о вертикальных пробелах, которые не включены в \ s ] (LF и NEL), то вы можете использовать класс символов [\ s \ v] для соответствия всем 26 пробельным символам, перечисленным выше.

22
ответ дан 18 December 2019 в 06:21
поделиться

Все они представляют собой простые пробелы (возвращающий код символа 32), которые можно перехватить с помощью регулярных выражений или trim () .

Попробуйте следующее:

preg_replace("/\s{2,}/", " ", $text);
2
ответ дан 18 December 2019 в 06:21
поделиться
$result = preg_replace('/\s/', '', $yourString)

См. http://www.php.net/manual/en/regexp.reference.backslash.php для получения дополнительной информации о \ s

1
ответ дан 18 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: