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


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

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

9 109

9 ответов:

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

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

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

пример:

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

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

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

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

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

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 (). Если входящая строка не будет должным образом очищена, ваше приложение рискует подвергнуться инъекции кода.

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

function secureRip(string $str): string { /* Rips all whitespace securely. */
  $arr = str_split($str, 1);
  $retStr = '';
  foreach ($arr as $char) {
    $retStr .= trim($char);
  }
  return $retStr;
}

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

? productID =26%20via%20@LFS

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

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

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

вы могли бы использовать:

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

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