Удалить лишние пробелы из строки - PullRequest
123 голосов
/ 09 ноября 2009

Я получаю строку из запроса к базе данных, затем удаляю все теги HTML, возврат каретки и перевод строки, прежде чем поместить ее в файл CSV. Единственное, я не могу найти способ удалить лишний пробел из между строками.

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

Ответы [ 11 ]

270 голосов
/ 09 ноября 2009

Не совсем точно, что вы хотите, но вот две ситуации:

  1. Если вы имеете дело только с лишним пробелом в начале или конце строки, вы можете использовать trim(), ltrim() или rtrim() для его удаления.

  2. Если вы имеете дело с дополнительными пробелами в строке, рассмотрите preg_replace из нескольких пробелов " "* с одним пробелом " ".

Пример:

$foo = preg_replace('/\s+/', ' ', $foo);
50 голосов
/ 09 ноября 2009
$str = str_replace(' ','',$str);

Или замените подчеркивание & nbsp; и т. д.

23 голосов
/ 19 июня 2013

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

Приведенная выше строка кода удалит лишние пробелы, а также начальные и конечные пробелы.

21 голосов
/ 03 июля 2014

ни один другой пример не работал для меня, поэтому я использовал этот:

trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))

заменяет все вкладки, новые строки, двойные пробелы и т. Д. На простой 1 пробел.

8 голосов
/ 22 мая 2015

Если вы хотите заменить только несколько пробелов в строке, например: "this string have lots of space . " И вы ожидаете, что ответ будет "this string have lots of space", вы можете использовать следующее решение:

$strng = "this string                        have lots of                        space  .   ";

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

echo $strng;
4 голосов
/ 28 апреля 2010
$str = preg_replace('/[\s]+/', ' ', $str);
3 голосов
/ 29 июня 2018

Существуют недостатки безопасности при использовании preg_replace (), если вы получаете полезную информацию из пользовательского ввода [или других ненадежных источников]. PHP выполняет регулярное выражение с помощью eval (). Если входящая строка не очищена должным образом, ваше приложение может быть подвергнуто внедрению кода .

В моем собственном приложении вместо санации входных данных (и, поскольку я имею дело только с короткими строками), я вместо этого сделал чуть более интенсивную процессорную функцию, хотя и безопасную, поскольку она ничего не выполняет ().

function secureRip(string $str): string { /* Rips all whitespace securely. */
  $arr = str_split($str, 1);
  $retStr = '';
  foreach ($arr as $char) {
    $retStr .= trim($char);
  }
  return $retStr;
}
2 голосов
/ 03 июля 2018

Вы можете использовать:

$str = trim(str_replace("  ", " ", $str);

удаляет лишние пробелы с обеих сторон строки, а преобразует несколько пробелов в один в строке.

1 голос
/ 04 декабря 2013

Чтобы расширить ответ Сандипа, у меня была куча строк в журналах, которые были неправильно закодированы в bit.ly. Они хотели закодировать только URL, но поставить пробел в твиттере и другие вещи после пробела. Это выглядело так

? productID =26%20via%20@LFS

Обычно это не было бы проблемой, но я получаю много попыток внедрения SQL, поэтому я перенаправляю все, что не является действительным идентификатором, на 404. Я использовал метод preg_replace, чтобы сделать недопустимый идентификатор продукта. строка в действительный идентификатор продукта.

$productID=preg_replace('/[\s]+.*/','',$productID);

Я ищу пробел в URL, а затем удаляю все после него.

0 голосов
/ 09 мая 2019

Недавно я написал простую функцию, которая удаляет лишние пробелы из строки без регулярного выражения implode(' ', array_filter(explode(' ', $str))).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...