用于反斜杠转义字符串的解码器

时间:2010-11-21 20:12:03

标签: php string backslash

PHP处理字符串解码的正确方法是什么,例如:

Test1 \\ Test2 \n Test3 \\n Test4 \abc

所需的输出是:

Test \ Test2 (linebreak) Test3 \n Test4 abc

我尝试过的一件事是:

str_replace(array('\\\\','\\n','\\'), array('\\',"\n",''), $str);

但这不起作用,因为它会运行两次替换,这会导致:

\\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;

}

这似乎有效,但我想知道是否有可能内置的确实如此,我完全错过了它,或者更好/更紧凑的方式来做到这一点。

1 个答案:

答案 0 :(得分:2)

stripcslashes() 几乎有效,但它无法识别\ a并跳过它:(

$str = 'Test1 \\\\ Test2 \\n Test3 \\\\n Test4 \\abc';
echo stripcslashes($str);

输出这个......

Test1 \ Test2 
 Test3 \n Test4 bc