Удаление лишних пробелов в строке с помощью php
Небольшая заметка об очередном использовании регулярных выражений. Поскольку регулярки сложно запомнить, я стараюсь все, с которым сталкиваюсь, сохранять и оформлять в статьи на блоге. Надеюсь, что такие короткие заметки полезны не только мне, но и помогут какому-нибудь скитальцу по интернету, в поисках нужной регулярки – в данном случае, это регулярное выражение для удаления лишних пробелов из строки.
Регулярка для удаления лишних пробелов в строке
Ниже приведен пример использования регулярки для удаления дублей пробелов между словами. Помимо избавления от лишних пробелов, в приведенном примере, также удаляются табы и переносы строк. То есть на выходе получим правильную строку, состоящую из слов, которые будут разделены между собой только одним пробелом.
Послесловие
На блоге появилась новая категория статей, где используются регулярные выражения. Теперь найти нужную регулярку будет проще.
Удаление лишних пробелов в строке с помощью php: 4 комментария
Когда отправляешь с вложением в логах пишет:
PHP Notice: Undefined variable: multipart in SendMailSmtpClass.php on line 152
Вложение и письмо отправляется нормально.
Приветствую! Это комментарий, видимо, к статье про отправку писем по smtp.
Я подправил класс, скачать можно на github: https://github.com/Ipatov/SendMailSmtpClass
С какого бодуна было взято, что эта регулярка убирает табы и переводы строк?
Удаление лишних пробелов в PHP.
Обрабатывая информацию, собирая ее из разных источников, например с сайта поставщика, мы часто сталкиваемся с тем, что нам надо ее привести в достойный вид, удалив лишние пробелы.
Удаление пробелов в начале или конце строки.
Удаление лишних пробелов в самом тексте.
Иногда нужно удалить лишние пробелы, а иногда и табы, в самом тексте, например: «Купив телефон сегодня вы получите самый лучший подарок». В этом тексте после каждого слова стоит более 1 пробела, Попробуем заменить лишние через регулярное выражение:
В данном случае \s говорит что надо заменить все пробелы, а + включая табы на 1 пробел. Если вы считаете, что регулярные выражения зло, то можно использовать:
Удаление «не удаляемых» пробелов.
Возможно вы столкнулись с такой проблемой, что ни одно из средств перечисленных выше не удаляет пробелы. Для начала рассмотрите внимательно текст, желательно в исходном коде, потому что текст « Купив телефон сегодня вы получите самый лучший подарок» может оказаться таким: « Купив телефон сегодня вы получите самый лучший подарок». Для начала надо заменить и просто на пробелы:
А потом, применить один из способов, о котором я писал выше.
Хорошо, это мы сделали, но у нас остались лишние пробелы, которые не удаляются стандартными методами. Вероятнее всего это NO-BREAK SPACE, в таблице utf-8 символов он идет как c2 a0.
Для начала попробуйте перевести ваш текст в HEX:
и поищите там: c2a0, как видно на скриншоте, у меня аж 2 таких пробела
Удаление через регулярное выражение:
Удаление без регулярного выражения:
переводим наш текс в HEX, заменяем NO-BREAK SPACE на обычный пробел, переводим обратно в обычный текст, после этого можно сделать замену пробелов и чистку.
Возможно у вас есть свой способ, может более практичный, как исправлять «не удаляемые» пробелы, то поделитесь в комментариях.


