Frage

Was ist der richtige Weg in PHP, um mit Decoding -Saiten wie folgt umzugehen:

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

Die gewünschte Ausgabe ist:

Test \ Test2 (linebreak) Test3 \n Test4 abc

Eine Sache, die ich ausprobiert habe, war:

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

Aber das funktioniert nicht, weil es den zweimal ersetzt wird, was dazu führt:

\\n

Sowieso als Linebreak dekodiert werden.

Also habe ich so etwas nachgedacht:

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

}

Dies scheint zu funktionieren, aber ich habe mich gefragt, ob es vielleicht ein Eingebaute gibt, das genau das tut, und ich habe es völlig verpasst, oder einen besseren/kompakteren Weg, dies zu tun.

War es hilfreich?

Lösung

stripcslashes() fast funktioniert, außer dass es a nicht erkennt und es überspringt :(

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

gibt das aus ...

Test1 \ Test2 
 Test3 \n Test4 bc
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top