Я добираюсь $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
, просто одиночные пробелы. Кто-либо может сказать мне, как сделать это?
Я не могу воспроизвести проблему здесь:
$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);
Вам необходимо:
$ro = preg_replace('/\s+/', ' ',$row['message']);
Вы используете \ s \ s +
, что означает пробел (пробел, табуляция или новая строка), за которым следует один или несколько пробелов. Это фактически означает замену двух или более пробелов одним пробелом.
Вы хотите заменить один или несколько пробелов одиночным пробелом, чтобы использовать шаблон \ s \ s *
или \ s +
(рекомендуется)
$str='This is a Text \n and so on Text text.';
print preg_replace("/[[:blank:]]+/"," ",$str);
<?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
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);
При этом все табуляции, все символы новой строки и все комбинации нескольких пробелов, табуляции и новой строки заменяются одним пробелом.
Все, что вам нужно, это запустить его следующим образом:
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.