Декодер для сбежавшей на обратную косание

StackOverflow https://stackoverflow.com/questions/4240082

  •  27-09-2019
  •  | 
  •  

Вопрос

Какой правильный путь в 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;

}

Это, кажется, работает, но мне было интересно, есть ли встроенный, который имеет встроенное именно это, и я полностью пропустил его, или лучше всего доставлял, чтобы сделать это.

Это было полезно?

Решение

stripcslashes() почти Работает, кроме того, что он не узнает a и пропускает его :(

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

выводит это ...

Test1 \ Test2 
 Test3 \n Test4 bc
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top