2010-11-21 4 views
1

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

} 

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

ответ

2

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

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

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

Test1 \ Test2 
Test3 \n Test4 bc 
+0

Это может быть претендентом на достаточно близко :) Не знаю, нужен ли мне синтаксис \ a. – Evert