バックスラッシュエスケープ文字列用のデコーダー
質問
これらのようなデコード文字列に対処するためのPHPの正しい方法は何ですか:
Test1 \\ Test2 \n Test3 \\n Test4 \abc
目的の出力は次のとおりです。
Test \ Test2 (linebreak) Test3 \n Test4 abc
私が試したことの1つは、次のとおりです。
str_replace(array('\\\\','\\n','\\'), array('\\',"\n",''), $str);
しかし、それはうまくいきません。なぜなら、それは2回交換を実行し、それが原因となるからです。
\\n
とにかくラインブレイクとしてデコードされる。
だから私はこのようなことを考えていました:
$offset = 0;
$str = 'Test1 \\\\ Test2 \\n Test3 \\\\n Test4 \\abc';
while(($pos = strpos($str,'\\', $offset)) !== false) {
$char = $str[$pos+1];
if ($char=="n" || $char=="N") {
// Insert a newline and eat 2 characters
$str = substr($str,0,$pos-1) . "\n" . substr($str,$pos+2);
} else {
// eat slash
$str = substr($str,0,$pos-1) . substr($str,$pos+1);
}
$offset=$pos+1;
}
これは機能しているようですが、まさにこれを行う内蔵があるのではないかと思っていましたが、これを完全に逃したのか、それともこれを行うためにより良い/よりコンパクトな方法です。
解決
stripcslashes()
almost works, except that it won't recognize \a and skips it :(
$str = 'Test1 \\\\ Test2 \\n Test3 \\\\n Test4 \\abc';
echo stripcslashes($str);
outputs this...
Test1 \ Test2
Test3 \n Test4 bc
所属していません StackOverflow