Удалите несколько пробелов

Я добираюсь $row['message'] от базы данных MySQL и я должен удалить весь пробел как \n \t и так далее.

$row['message'] = "This is   a Text \n and so on \t     Text text.";

должен быть отформатирован к:

$row['message'] = 'This is a Text and so on Text text.';

Я попробовал:

 $ro = preg_replace('/\s\s+/', ' ',$row['message']);
 echo $ro;

но это не удаляет \n или \t, просто одиночные пробелы. Кто-либо может сказать мне, как сделать это?

195
задан Amal Murali 27 May 2014 в 05:14
поделиться

6 ответов

Я не могу воспроизвести проблему здесь:

$x = "this    \n \t\t \n    works.";
var_dump(preg_replace('/\s\s+/', ' ', $x));
// string(11) "this works."

Я не уверен, была ли это просто ошибка транскрипции или нет, но в вашем примере вы используете строку в одинарных кавычках. \ n и \ t обрабатываются как символы новой строки и табуляции, только если у вас есть строка с двойными кавычками. То есть:

'\n\t' != "\n\t"

Изменить : как указал Codaddict, \ s \ s + не заменит один символ табуляции. Я все еще не думаю, что использование \ s + является эффективным решением, так что как насчет этого:

preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x);
7
ответ дан 23 November 2019 в 05:21
поделиться

Вам необходимо:

$ro = preg_replace('/\s+/', ' ',$row['message']);

Вы используете \ s \ s + , что означает пробел (пробел, табуляция или новая строка), за которым следует один или несколько пробелов. Это фактически означает замену двух или более пробелов одним пробелом.

Вы хотите заменить один или несколько пробелов одиночным пробелом, чтобы использовать шаблон \ s \ s * или \ s + (рекомендуется)

{{ 1}}
374
ответ дан 23 November 2019 в 05:21
поделиться
$str='This is   a Text \n and so on Text text.';
print preg_replace("/[[:blank:]]+/"," ",$str);
7
ответ дан 23 November 2019 в 05:21
поделиться
<?php
$str = "This is  a string       with
spaces, tabs and newlines present";

$stripped = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $str);

echo $str;
echo "\n---\n";
echo "$stripped";
?>

Это выводит

This is  a string   with
spaces, tabs and newlines present
---
This is a string with spaces, tabs and newlines present
65
ответ дан 23 November 2019 в 05:21
поделиться
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);

При этом все табуляции, все символы новой строки и все комбинации нескольких пробелов, табуляции и новой строки заменяются одним пробелом.

4
ответ дан 23 November 2019 в 05:21
поделиться

Все, что вам нужно, это запустить его следующим образом:

echo preg_replace('/\s{2,}/', ' ', "This is   a Text \n and so on \t     Text text."); // This is a Text and so on Text text.
1
ответ дан 23 November 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: