Удалить лишние пробелы из строки

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

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

9 ответов


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

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

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

пример:

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

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

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


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

вышеуказанная строка кода удалит extra помещения, а также ведущие и конечные пробелы.


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

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

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


Если вы хотите заменить только несколько пробелов в строке, например:"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;

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

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

в моем собственном приложении, вместо того, чтобы беспокоить дезинфекцию ввода (и поскольку я имею дело только с короткими строками), я вместо этого сделал немного более интенсивную функцию процессора, хотя является безопасным, так как он ничего не 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;
}

чтобы расширить ответ Сандипа, у меня была куча строк, отображаемых в журналах, которые были неправильно закодированы в бит.ли. Они хотели закодировать только URL, но поместили ручку twitter и некоторые другие вещи после пробела. Вот как это выглядело!--3-->

? productID =26%20via%20@LFS

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

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

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


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

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

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