2012-04-03 20 views
1

Es scheint ein Problem mit magischen Zitaten zu sein. Die ursprüngliche Zeichenfolge enthält nur \ n und \ n \ n und \ n \ n \ n und \ n \ r und so weiter. Diese Zeilenumbrüche werden vom Browser nicht interpretiert.Wie entfernen Sie mehrere Zeilenumbrüche ( n) aus der JSON-Zeichenfolge?

Was wir tun möchten, ist: zu ersetzen mehr als 2 Zeilenumbruch mit nur 1 single \ n.

Was wir bisher versucht haben: viele verschiedene reguläre Ausdrücke mit preg_replace, aber die \ n wird nicht rausgeschmissen.

Irgendwelche Ideen?

Heres ein Beispiel (auf Ihre Vorschläge aktualisiert - aber immer noch nicht funktioniert):

echo '<h3>Source:</h3>'; 
$arr_test = array(
    'title'  => 'my title', 
    'content' => 'thats my content\n\n\n\nwith a newline' 
); 
$json_text = json_encode($arr_test); 
$json_text = stripslashes($json_text); //if I leave that out, then \\n will echo 
echo $json_text; 
// OUTPUT: {"title":"my title","content":"thats my content\n\n\n\nwith a newline"} 

echo '<h3>Result 1:</h3>'; 
$pattern = '/\n{2,}/'; 
$result1 = preg_replace($pattern,"x",$json_text); 
echo $result1; 
// OUTPUT: {"title":"my title","content":"thats my content\n\n\n\nwith a newline"} 

echo '<h3>Result 2:</h3>'; 
$result2 = preg_replace('/([\n]+)/s', 'x', $json_text, -1, $count); 
echo $count; 
// OUTPUT: 0 
echo $result2; 
// OUTPUT: {"title":"my title","content":"thats my content\n\n\n\nwith a newline"} 
+0

Ich denke, die zweite reguläre Ausdruck Sie versucht hat ein Tippfehler beim vierten Charakter! (aka: Bitte zeigen Sie einige Ihrer Arbeit und die Ergebnisse, so ist es einfach zu sehen, ob es nur ein Fehler im Ausdruck ist, oder etwas anderes (seltsame Sachen in der JSON)) – Nanne

+0

Was hast du probiert? Und hast du den Modifikator/s eingeschlossen, der neue Zeilen enthält? –

Antwort

1

Sie könnten auch versuchen, durch den Strang Looping und ersetzen zwei Zeilen mit einem bis keine Doppel Newline gelassen wird:

echo '<h3>Result 4:</h3>'; 
$result4 = $json_text; 
do{ 
    $result4 = str_replace('\n\n','\n',$result4, $count); 
}while($count>0); 

echo $result4; 
// OUTPUT: {"title":"my title","content":"thats my content\nwith a newline"} 

oder mit preg_replace:

echo '<h3>Result 5:</h3>'; 

$result5 = preg_replace('/(\\\n)+/m', '\\\n', $json_text); 

echo $result5; 
// OUTPUT: {"title":"my title","content":"thats my content\nwith a newline"} 
+0

ja! genial! Das funktioniert wie Charme! –

1
if(get_magic_quotes_gpc()) { 
    $string = stripslashes($string); // $string sended with POST or GET 
} 

$string = str_replace("\n\n", "\n", $string); // only for 2 newlines 

ODER

$string = preg_replace('/\n{2,}/s', '\n', $string); // more than 2 newlines 
+0

Wenn Sie 2 durch 1 ersetzen, was passiert, wenn es drei gibt? Drei geht zu zwei, also müssten Sie die Ersetzung zweimal durchführen. –

+0

@ChrisGessler zweite Lösung mit preg_replace funktioniert für mehr als 2 – safarov

+1

ohne den/s Modifikator, wie geht es über eine Zeile hinaus? –

0
echo str_replace("\n", "", "aassasa\n \n aasassf \n saaaaafs asaf ssaf \n afsf \n "); 

nur für Ihre Demo

Echo str_replace ("a", "", "aaabcefefgaaaaaaaaaaamnopq raaaaaa ");

+0

ersetzt das nicht einfach alle \ n Zeichen mit leerer Zeichenfolge? –

+0

es funktioniert bitte versuchen Sie es –

+0

Wie lässt es nur 1 \ n, wenn Multiples vorhanden sind? d. h. \ n \ n \ n –

0

try this:

// replace 2 or more consecutive newlines with a single newline 
$string = preg_replace("/\n\n+/i", "\n", $string); 
0

Try this:

  1. Ersetzen Sie alle \ n Zeichen (1 oder mehr) mit \ n
  2. /s Modifikator - umfassen mehrere Linien
>  $string = preg_replace($'/([\n]+)/s', '\n', $string, -1, $count);            
>  echo $count; 
Verwandte Themen