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