Удалить лишние пробелы из строки
Я получаю строку из запроса базы данных, а затем удаляю все теги HTML, возврат каретки и новые строки перед тем, как поместить их в файл CSV. Единственное, что я не могу найти способ удалить избыточное белое пространство между строками.
Каким будет лучший способ удалить внутренние пробельные символы?
Ответы
Ответ 1
Не уверен, что именно вы хотите, но вот две ситуации:
-
Если вы просто имеете дело с избытком whitespace в начале или в конце строки, вы можете использовать trim()
, ltrim()
или rtrim()
, чтобы удалить его.
-
Если вы имеете дело с дополнительными пробелами внутри строки, рассмотрите preg_replace
из нескольких whitespaces " "*
с одним whitespace " "
.
Пример:
$foo = preg_replace('/\s+/', ' ', $foo);
Ответ 2
$str = str_replace(' ','',$str);
Или замените с помощью подчеркивания и nbsp; и т.д.
Ответ 3
$str = trim(preg_replace('/\s+/',' ', $str));
В приведенной выше строке кода будут удалены дополнительные пробелы, а также начальные и конечные пробелы.
Ответ 4
ни один из других примеров не работал для меня, поэтому я использовал этот:
trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))
это заменяет все вкладки, новые строки, двойные пробелы и т.д. на простой 1 пробел.
Ответ 5
Если вы хотите заменить только несколько пробелов в строке, для примера: "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;
Ответ 6
$str = preg_replace('/[\s]+/', ' ', $str);
Ответ 7
Есть недостатки безопасности при использовании 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;
}
Ответ 8
Вы можете использовать:
$str = trim(str_replace(" ", " ", $str));
Это удаляет дополнительные пробелы с обеих сторон строки и преобразует два пробела в один внутри строки. Обратите внимание, что это не преобразует три или более пробелов подряд в один!
Другой способ, который я могу предложить, - это использовать взрыв и взрыв, который безопаснее, но совершенно не оптимален!
$str = implode(" ", array_filter(explode(" ", $str)));
Я предлагаю использовать нативный цикл for или регулярное выражение для выполнения такой работы.
Ответ 9
Чтобы развернуть ответ Sandips, у меня было множество строк, появляющихся в журналах, которые были неправильно закодированы в bit.ly. Они предназначались для кодирования только URL-адреса, но после пробела добавляли твиттер и некоторые другие вещи. Это выглядело так:
? productID =26%20via%[email protected]
Как правило, это не проблема, но я получаю много попыток SQL-инъекций, поэтому я перенаправляю все, что не является действительным идентификатором для 404. Я использовал метод preg_replace, чтобы сделать неверную строку productID действительной ProductID.
$productID=preg_replace('/[\s]+.*/','',$productID);
Я ищу пробел в URL-адресе и затем удаляю все после него.
Ответ 10
$str = "I am a PHP Developer";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
if (isset($str_arr[$i + 1]) && $str_arr[$i] == ' ' && $str_arr[$i] == $str_arr[$i + 1]) {
unset($str_arr[$i]);
}
else {
continue;
}
}
echo implode("", $str_arr);
Ответ 11
Недавно я написал простую функцию, которая удаляет лишние пробелы из строки без регулярного выражения implode(' ', array_filter(explode(' ', $str)))
.