Decodificador para corda de barro de barragem
Pergunta
Qual é a maneira correta no PHP para lidar com seqüências de decodificação, como estas:
Test1 \\ Test2 \n Test3 \\n Test4 \abc
A saída desejada é:
Test \ Test2 (linebreak) Test3 \n Test4 abc
Uma coisa que eu tentei foi:
str_replace(array('\\\\','\\n','\\'), array('\\',"\n",''), $str);
Mas isso não funciona, porque executará a substituição duas vezes, o que causa:
\\n
De qualquer maneira, ser decodificado como um linebreak.
Então, eu estava pensando algo assim:
$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;
}
Isso parece funcionar, mas eu estava me perguntando se talvez exista um que faça exatamente isso e eu perdi completamente, ou uma maneira melhor/mais compacta para fazer isso.
Solução
stripcslashes()
quase funciona, exceto que não reconhecerá a e pula :(
$str = 'Test1 \\\\ Test2 \\n Test3 \\\\n Test4 \\abc';
echo stripcslashes($str);
produz isso ...
Test1 \ Test2
Test3 \n Test4 bc
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow