Я вообще никогда не публикую здесь, так как я всегда нахожу ответ в других сообщениях... но на этот раз ничего не работает, я не знаю, что я делаю неправильно.
Мне нужно var_dump переменную в строку. Я нашел ob_start()
и ob_get_clean()
в руководстве по php для достижения этого.
Для нужд текстового журнала/отладки я хочу, чтобы все \n,\r, несколько пробелов и т.д. Были очищены.
Мои поиски на SO принесли мне такие решения, как
$r = preg_replace( '/\s+/', ' ', trim($r));
//or
$r = trim(preg_replace( '/\s+/', ' ', $r));
//I even tried this:
$r = trim(preg_replace( '/\s+/', ' ', trim($r)));
Но я могу избавиться от последнего символа новой строки ни с одним из этих решений.
Здесь код функции:
function var_dump_to_string ($v,$style='normal') {
ob_start();//use buffering to catch direct output from var_dump()
var_dump($v);
$r=ob_get_clean();
if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
$r = trim(preg_replace( '/\s+/', ' ', trim($r)));
return $r;
}
В моем текстовом журнале все еще есть нежелательная новая строка. Я попытался var_dump результат этой функции, там действительно есть новая строка... Что мне не хватает?
EDIT: теперь (рабочая) функция выглядит так, благодаря ответам @vks и @anubhava:
function var_dump_to_string ($v,$style='normal') {
$r = var_export($v, true);
if($style=='flat') $r = preg_replace('/\s+|\s$/', ' ', $r);
return $r;
}
\s$
Попробуйте это. Замените empty string
.
\s+|\s$
$r = trim(preg_replace( '/\s+/', ' ', trim($r))); $r = preg_replace( '/\s$/', ' ', trim($r));
Попробуй это
$r = trim(preg_replace( '/(\r)?\n(\s*)?(\r)?\n/', ' ', trim($r)));
Вместо этого используйте функцию var_export, чтобы получить возвращаемое значение определения переменной в строке:
$ret = var_export($v, true);
// code to replace newline etc:
$ret = preg_replace('/\s+$/', '', $ret);
$ret = preg_replace('/[\r\n]+/', '', $ret);
Решение 1: preg_replace("/\r\n|\r|\n/", ' ', $r)
Код:
function var_dump_to_string($v, $style='normal'){
ob_start(); //use buffering to catch direct output from var_dump()
var_dump($v);
$r=ob_get_clean();
if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
$r = trim(preg_replace("/\r\n|\r|\n/", ' ', $r));
return $r;
}
Решение 2: str_replace(PHP_EOL, '', $r)
Код:
function var_dump_to_string($v, $style='normal'){
ob_start(); //use buffering to catch direct output from var_dump()
var_dump($v);
$r=ob_get_clean();
if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
$r = trim(str_replace(PHP_EOL, ' ', $r));
return $r;
}
"PHP_EOL" включает в себя все символы "конец строки". Это решение - лучший подход для замены символов "конец строк".
$r
?