日本語、改行、タブ文字の混ざった文章を日本語を維持しつつ、一行に変換&復元したいです。

具体的に言うと、json_encode()の様に
\→\\、改行→\n、タブ→\t ・・と変換して与えられた文字を1行のテキストに変換したいです。
json_encode()でいいかと思ったのですが、json_encode()だと日本語が\u3042 の様に変換されてしまいます

\→\\、改行→\n、タブ→\t の変換だけなら自力でやればいいかと思って
$b=str_replace("\\\\",'\\\\',$a);
$b=str_replace("\n",'\n',$b);
の様な処理を書いてみたのですが、どうも上手く変換&復元が出来ません。
特に\\nを復元する時、\\→\を先にやると\\n→\n→改行 となってしまい
\n→改行を先にやると、\\n→\改行 となってしまい
期待している\\n→\nという復元が出来ません。

json_encode()で日本語を\u3042のように変換させない手段、又は\\n→\nが出来る処理。
手段は問いませんので
日本語、改行、タブ文字の混ざった文章を日本語を維持しつつ、一行のテキストに変換&復元する方法を教えて下さい。