Декодер для строки с обратной косой чертой - PullRequest
1 голос
/ 21 ноября 2010

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

}

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

1 Ответ

2 голосов
/ 21 ноября 2010

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

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

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

Test1 \ Test2 
 Test3 \n Test4 bc
...