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

Я получаю строку из запроса базы данных, а затем удаляю все теги 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))).