Удалить лишние пробелы из строки
Я получаю строку из запроса базы данных, затем я удаляю все теги HTML, возврат каретки и новые строки, прежде чем поместить его в файл CSV. Единственное, я не могу найти способ удалить лишние пробел от между строки.
каков был бы лучший способ удалить внутренние пробелы?
9 ответов:
Не уверен, что именно вы хотите, но вот две ситуации:
если вы просто имеете дело с избытком пробел в начале или конце строки вы можете использовать
trim()
,ltrim()
илиrtrim()
, чтобы удалить его.если вы имеете дело с дополнительными пробелами в строке рассмотрим
preg_replace
нескольких пробел" "*
в одном пробел" "
.пример:
$foo = preg_replace('/\s+/', ' ', $foo);
$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;
есть недостатки безопасности, используя код 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-адресе, а затем удаляю все после него.