Что такое правильный путь в PHP, чтобы иметь дело с декодирования строк, таких, как эти:Decoder для обратной косой черты маскирование строки
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;
}
Это похоже на работу, но мне было интересно, если есть, может быть, встроенный, что делает именно это, и я полностью пропустил, или лучше/компактный способ для этого.
Это может быть претендентом на достаточно близко :) Не знаю, нужен ли мне синтаксис \ a. – Evert