2010-11-21 5 views
1

Quelle est la bonne façon en PHP pour traiter avec des chaînes de décodage, comme ceux-ci:décodeur pour chaîne échappée backslash-

Test1 \\ Test2 \n Test3 \\n Test4 \abc 

La sortie désirée est:

Test \ Test2 (linebreak) Test3 \n Test4 abc 

Une chose que j'ai essayé était:

str_replace(array('\\\\','\\n','\\'), array('\\',"\n",''), $str); 

Mais cela ne fonctionne pas, car il courra le remplacement deux fois, ce qui provoque:

\\n 

Pour être décodé comme un saut de ligne quand même.

Je pensais quelque chose comme ceci:

$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; 

} 

Cela semble fonctionner, mais je me demandais s'il y a peut-être un qui construit en fait exactement cela et j'échapperaient complètement, ou mieux/plus manière compacte complètement pour le faire.

Répondre

2

stripcslashes()presque œuvres, sauf qu'il ne reconnaîtra pas \ a et il saute :(

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

sorties ... ce

Test1 \ Test2 
Test3 \n Test4 bc 
+0

Cela pourrait être un candidat pour assez proche :) Je ne sais pas si j'ai besoin de la syntaxe \ a de toute façon. – Evert