Невозможно удалить все новые строки из строки - последний остается

0

Я вообще никогда не публикую здесь, так как я всегда нахожу ответ в других сообщениях... но на этот раз ничего не работает, я не знаю, что я делаю неправильно.

Мне нужно 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;
}
  • 0
    Можете ли вы привести пример содержимого $r ?
  • 0
    Это общая функция, предназначенная для использования где угодно для любых переменных, которые мне нужно было регистрировать. Я пробовал это с "нулем" (причина, почему var_dump, а не print_r), с некоторыми массивами (причина, почему он должен отбрасывать все новые строки), всегда есть новая строка в конце.
Теги:
newline

4 ответа

1
Лучший ответ
\s$

Попробуйте это. Замените empty string.

\s+|\s$
  • 0
    Это работает, но только если я делаю это после моей первоначальной замены: $r = trim(preg_replace( '/\s+/', ' ', trim($r))); $r = preg_replace( '/\s$/', ' ', trim($r));
  • 1
    @fpierrat вы можете попробовать отредактированный код
Показать ещё 3 комментария
1

Попробуй это

$r = trim(preg_replace( '/(\r)?\n(\s*)?(\r)?\n/', ' ', trim($r)));
1

Вместо этого используйте функцию var_export, чтобы получить возвращаемое значение определения переменной в строке:

$ret = var_export($v, true);

// code to replace newline etc:
$ret = preg_replace('/\s+$/', '', $ret);
  • 0
    var_export намного лучше чем мой ob_start. Что касается замены, он просто заменяет последнюю новую строку, а не другие (например, при экспорте переменной массива).
  • 0
    Если вы хотите удалить все новые строки, используйте: $ret = preg_replace('/[\r\n]+/', '', $ret);
Показать ещё 1 комментарий
0

Решение 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" включает в себя все символы "конец строки". Это решение - лучший подход для замены символов "конец строк".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню