1

次のような文字列のデコードを 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;

}

これは機能しているようですが、これを正確に実行するビルトインがあり、完全に見逃していたのか、それともこれを行うためのより良い/よりコンパクトな方法があるのか​​ 疑問に思っていました。

4

1 に答える 1

2

stripcslashes() \a を認識せずにスキップすることを除いて、ほとんど動作します :(

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

これを出力します...

Test1 \ Test2 
 Test3 \n Test4 bc
于 2010-11-21T20:15:10.533 に答える