Как удалить все пробелы из строки в PHP?

Как я могу удалить / удалить все пробелы из строки в PHP?

У меня есть строка типа $string = "this is my string";

Результат должен быть "thisismystring"

Как я могу это сделать?


person streetparade    schedule 21.01.2010    source источник
comment
См. Также: stackoverflow .com / questions / 1279774 /   -  person Mark Byers    schedule 21.01.2010
comment
Технически это немного другой вопрос, чем повторяющийся вопрос. Иногда вам может потребоваться разделить пробелы без табуляции.   -  person haz    schedule 08.12.2017
comment
Вот кратчайший способ сделать это на случай, если вам когда-нибудь понадобится выиграть в Code Golf: strtr($string,[' '=>'']);   -  person haz    schedule 08.12.2017
comment
Чтобы удалить только начало и конец, используйте trim функции: php.net/trim   -  person Tim Visée    schedule 29.05.2019


Ответы (4)


Вы имеете в виду просто пробелы или все пробелы?

Для пробелов используйте str_replace:

$string = str_replace(' ', '', $string);

Для всех пробелов (включая табуляции и концы строк) используйте preg_replace:

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

(Из здесь).

person Mark Byers    schedule 21.01.2010
comment
Во-первых, вам не нужен +. $string = preg_replace('/\s/', '', $string); должно работать нормально. Единственное, с чем у меня это не работает, - это неразрывные пробелы. Мне пришлось использовать это: $string = preg_replace('~\x{00a0}~','',$string);, чтобы удалить их. Благодаря этому ответу stackoverflow: stackoverflow.com/a/12838189/631764 - person Buttle Butkus; 19.07.2013
comment
Вопрос новичку из интереса: в чем разница между space и whitespace? Разве это не то же самое? - person Avatar; 12.09.2013
comment
@EchtEinfachTV пробел - это обычный пробел между словами, пробел - это любой пробел в тексте: обычный пробел, новая строка, табуляция и т. Д. - person juuga; 13.09.2013
comment
Вам нужен ответ @ButtleButkus для очистки содержимого WYSIWYG, которое включает неразрывные пробелы. - person fideloper; 22.07.2014
comment
Если после реализации этого решения вы видите новые странные символы, вы можете использовать решение, найденное здесь: stackoverflow.com/q/1176904 / 80857 - person Keyslinger; 14.10.2015
comment
Кажется, это не удаляет   символов - person Jack; 01.12.2016
comment
  - это HTML-строка, которую нужно удалить самостоятельно. Пробельные символы - это HT (9), LF (10), FF (12), CR (13) и пробел (32). Однако, если происходит сопоставление для конкретной локали, символы с кодовыми точками в диапазоне 128–255 также могут рассматриваться как символы пробела, например, NBSP (A0). - person stamster; 20.01.2017
comment
Обрезка должна делать правую и левую обрезку промежутков. В большинстве случаев вам нужно удалить более одного пробела. Поэтому лучше использовать комбинацию обрезки и регулярного выражения. Пример: $ txt = 'Hello World! '; $ txt = trim (preg_replace ('/ \ s {2} + /', '', $ txt)); echo '‹br›'. $ txt. '‹br›'; Я действительно удивлен, что это обычное явление, которое PHP API не предлагает решения. - person Shailesh Kumar Dayananda; 20.03.2017
comment
Я всегда рекомендую \s+, когда возможно появление нескольких пробелов. Таким образом, выполняется больше и меньше совпадений с меньшим количеством общих замен, что в конечном итоге приводит к тому же результату. - person mickmackusa; 03.05.2021

Если вы хотите удалить все пробелы:

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

См. 5-й пример в документации preg_replace. (Обратите внимание, что я изначально скопировал это здесь.)

Изменить: комментаторы указали и правы, что str_replace лучше, чем preg_replace, если вы действительно просто хотите удалить символ пробела. Причина использования preg_replace - удалить все пробелы (включая табуляции и т. Д.).

person Arkaaito    schedule 21.01.2010
comment
»Если вам не нужны сложные правила замены (например, регулярные выражения), вы всегда должны использовать эту функцию [str_replace] вместо ereg_replace() или preg_replace() - person Joey; 21.01.2010
comment
Я бы не предлагал использовать регулярные выражения для простого удаления пробелов. str_replace для пробелов, preg_replace для всех пробелов. - person Peter Perháč; 21.01.2010
comment
@Johannes & MasterPeter: Согласен, но OP оставил комментарий к другому ответу, который хочет удалить пустое пространство. - person GreenMatt; 21.01.2010
comment
Хорошая мысль, Йоханнес. Я выбрал preg_replace (), потому что неправильно понял вопрос и подумал, что он имел в виду, как правило, пробелы (не обязательно конкретный символ пробела). - person Arkaaito; 21.01.2010
comment
Безнадежно сломанный этот, удалит 2 или более пробела, а не один, как требуется в примере. - person user163365; 21.01.2010
comment
Нет, он удаляет один или несколько (знак плюса означает или несколько, не и больше). - person Brilliand; 06.10.2012

Если вы знаете, что пустое пространство возникает только из-за пробелов, вы можете использовать:

$string = str_replace(' ','',$string); 

Но если это могло быть из-за пробела, табуляции ... вы можете использовать:

$string = preg_replace('/\s+/','',$string);
person codaddict    schedule 21.01.2010

Таким образом, str_replace сделает свое дело

$new_str = str_replace(' ', '', $old_str);
person David Heggie    schedule 21.01.2010