Я не могу воспроизвести проблему здесь:
$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);