Все техники удаления пробельных символов в языке PHP

Раздел: Операции с данными -> Работа со строками

Удаление пробелов в PHP: обзор основных методов

Наиболее универсальное решение для удаления всех пробельных символов (включая табуляцию, перевод строки, возврат каретки и пробел) из строки в PHP - использование регулярного выражения с функцией preg_replace и шаблоном \s+. Для корректной работы с многобайтовыми кодировками (например, UTF-8) рекомендуется добавить модификатор u.


$str = '  Пример\tтекста\nс пробелами  ';
$cleaned = preg_replace('/\s+/u', '', $str);
echo $cleaned; // 'Примертекстаспробелами'

Этот метод удаляет любые символы, соответствующие классу \s: обычный пробел (0x20), табуляцию (0x09), перевод строки (0x0A, 0x0D), вертикальную табуляцию (0x0B) и другие. Модификатор u включает режим Unicode, что правильно обрабатывает кириллицу и другие символы.

Если требуется удалить только обычный пробел (код 32), то более быстрым вариантом будет str_replace:


$str = 'удалить пробелы';
$cleaned = str_replace(' ', '', $str);
echo $cleaned; // 'удалитьпробелы'

Как удалить пробелы только в начале и в конце строки?

Используйте функцию trim() (удаляет пробелы с обоих концов), ltrim() (только слева) или rtrim() (только справа). По умолчанию удаляются пробел, табуляция, перевод строки и другие символы, перечисленные во втором параметре.


$str = '  текст с пробелами по краям  ';
echo trim($str);     // 'текст с пробелами по краям'
echo ltrim($str);    // 'текст с пробелами по краям  '
echo rtrim($str);    // '  текст с пробелами по краям'

Как заменить множественные пробелы на один?

Для нормализации пробелов (оставить только одиночные пробелы) применяется регулярное выражение с квантификатором +:


$str = 'Много    пробелов   между   словами';
$normalized = preg_replace('/\s+/', ' ', $str);
echo $normalized; // 'Много пробелов между словами'

Как удалить неразрывные пробелы (nbsp)?

Неразрывный пробел (U+00A0) не входит в класс \s. Для его удаления используйте str_replace с символами в UTF-8 или регулярное выражение с указанием кода символа:


$str = 'Текст с\u00A0неразрывным пробелом';
// Способ 1: прямая замена
$cleaned = str_replace("\xc2\xa0", '', $str);
// Способ 2: регулярное выражение
$cleaned = preg_replace('/\x{00A0}/u', '', $str);
echo $cleaned; // 'Текст снеразрывным пробелом'

Как удалить все пробельные символы, включая неразрывные, переносы строк и табуляции?

Для полной очистки строки от любых пробельных символов используйте расширенный класс Unicode \p{Z} (разделители) и \p{C} (управляющие символы, куда входят неразрывные пробелы как Cc?). Точнее, неразрывный пробел относится к категории \p{Zs}. Поэтому лучше задать комбинацию:


$str = '  Пример\u00A0с\tразными пробелами\n';
$cleaned = preg_replace('/[\s\x{00A0}]+/u', '', $str);
echo $cleaned; // 'Примерсразнымипробелами'

Как удалить пробелы в начале каждой строки многострочного текста?

Можно разбить строку по переносам, обработать каждую строку trim и собрать обратно:


$text = '  первая строка \n  вторая строка \n  третья ';
$lines = explode("\n", $text);
$trimmedLines = array_map('trim', $lines);
$result = implode("\n", $trimmedLines);
echo $result;
// первая строка
// вторая строка
// третья

Типичные проблемы и ошибки при удалении пробелов

1. Неразрывные пробелы. Многие разработчики забывают о символах неразрывного пробела (например, в HTML кодах  ). Обычные функции trim() и str_replace(' ', '', $str) их не удаляют. Решение: использовать замену конкретного символа (см. пример выше).

2. Многобайтовые кодировки. При работе с UTF-8 и другими многобайтовыми кодировками функция preg_replace без модификатора u может испортить последовательности байтов, особенно если в строке встречаются символы размером более одного байта. Всегда добавляйте u.

3. Производительность. Для очень больших строк (мегабайты) preg_replace может работать медленнее str_replace. Если требуется удалить только один тип пробела (обычный пробел), предпочтительнее str_replace.

4. Использование trim() с кириллицей. Функция trim() корректно работает с однобайтовыми кодировками. В многобайтовых средах (например, UTF-8) она может удалять только стандартные ASCII-пробелы, оставляя неразрывные и другие символы. Для полноценной обрезки используйте mb_trim() (собственная реализация) или регулярное выражение с u.

5. Лишние пробелы внутри тегов HTML. Если нужно удалить пробелы в HTML, следует учитывать, что простое удаление может повредить структуру документа. Используйте специальные парсеры или удаляйте только лишние пробелы между тегами.

Расширенные примеры удаления пробелов

Пример 1. Удаление всех видов пробелов с помощью Unicode-свойств

Пример

$str = "  \t Пример с\u00A0неразрывным\n пробелом  ";
// Удаляем все разделители (пробелы, табуляции, переносы) и неразрывный пробел
$cleaned = preg_replace('/[\p{Z}\x{00A0}]+/u', '', $str);
echo $cleaned;
Примерснеразрывнымпробелом

Объяснение: класс \p{Z} включает все Unicode-разделители (пробел, табуляция, перевод строки и др.), а \x{00A0} отдельно добавляет неразрывный пробел. Модификатор u обязателен для корректной работы с многобайтовыми символами.

Пример 2. Обрезка пробелов по краям каждой строки без разбиения на массив

Пример

$text = "  \t первая строка \n  вторая \n  третья  ";
// Используем preg_replace с модификатором m (многострочный)
$trimmed = preg_replace('/^[\s]+|[\s]+$/m', '', $text);
echo $trimmed;
первая строка
вторая
третья

Модификатор m заставляет якоря ^ и $ совпадать с началом и концом каждой строки, а не всего текста.

Пример 3. Удаление неразрывных пробелов с использованием ord() и пользовательской функции

Пример

function removeNbsp($str) {
    $result = '';
    $len = strlen($str);
    for ($i = 0; $i < $len; $i++) {
        // Неразрывный пробел в UTF-8 - это два байта: 0xC2 0xA0
        if (ord($str[$i]) == 194 && isset($str[$i+1]) && ord($str[$i+1]) == 160) {
            $i++; // пропускаем второй байт
        } else {
            $result .= $str[$i];
        }
    }
    return $result;
}

$str = "Текст с\u00A0неразрывным\u00A0пробелом";
echo removeNbsp($str);
Текст снеразрывнымпробелом

Этот подход полезен, когда нужно избежать регулярных выражений или работать с низкоуровневыми операциями.

Пример 4. Замена табуляции на пробелы и удаление лишних пробелов

Пример

$str = "Колонка1\tКолонка2\tКолонка3";
// Сначала заменяем табуляцию на один пробел
$cleaned = str_replace("\t", ' ', $str);
// Затем сжимаем множественные пробелы
$cleaned = preg_replace('/\s+/', ' ', $cleaned);
echo $cleaned;
Колонка1 Колонка2 Колонка3

Так можно нормализовать текстовые данные из таблиц.

Пример 5. Использование strtr для одновременной замены нескольких типов пробелов

Пример

$str = "Обычный пробел \t табуляция \n перенос";
// Заменяем все виды пробелов на пустую строку
$replace = [
    ' ' => '',
    "\t" => '',
    "\n" => '',
    "\r" => '',
    "\x{00A0}" => '', // неразрывный пробел
];
$cleaned = strtr($str, $replace);
echo $cleaned;
Обычныйпробелтабуляцияперенос

Функция strtr удобна, когда замены просты и их количество невелико.

- Php текст (работа с текстом в php)
- Php символ (работа с символами в php)
- Php длина строки (длина строки php)
- Php str replace (замена в строке php)
- Str search php (поиск в строке php)
- Php replace (замена строк в php)
- Php пробел (удаление пробелов в php)
- слова php (слова в php (работа со строками))
- Php strip tags (удаление html тегов функцией strip_tags)
- Php preg (регулярные выражения в php (preg))
- Php подстроки (получение подстроки в php)
- Php encode (кодирование строк в php (encode))
- Character php (символы php)
- удалить пробел в строке php (php удалить пробелы в строке)
- Php первые символов (получение первых символов строки в php)
- Php str contains (проверка наличия подстроки в php)
- Php проверить строку (проверить строку в php)
- Php find (поиск в php)
- Php символ строки (работа с символами строки в php)
- Php format (форматирование строк в php)
- Php первая заглавная (преобразование первой буквы в заглавную в php)
- Php вхождение подстроки (поиск подстроки в строке в php)
- Php end of line (символ конца строки в php)

php удалить пробелы в строке - comments

En
удалить пробел в строке php (php)