2010-07-16 9 views
9

Ich ziehe Inhalte aus einer DB, die mit mysql_real_escape_string bereinigt wurde. Dementsprechend erscheinen die neuen Zeilenzeichen nun als "\ n". Das Problem ist, dass dieser Inhalt für Benutzer innerhalb eines < pre> -Tags angezeigt wird, so dass ich \ n nicht durch < br /> ersetzen kann.Ersetzen Sie n durch den tatsächlichen neuen Zeilenzeichencode

Ich denke, ich könnte ersetzen \ n mit der tatsächlichen utf8 Zeichencode vor dem Einfügen des Ergebnisses in die < pre>.

Kann Somoneone hier helfen? Die Verwendung von mysql_real_escape_string ist aufgrund der Sicherheitsrichtlinien nicht wirklich eine Option.

Danke.

+1

Ich bin ein wenig verwirrt, in der Regel sollten Sie Ihre Daten unescaped zurückgegeben werden. Die Art und Weise, wie Sie es beschreiben, ist so, als ob die Daten zweimal durch mysql_real_escape_string() gingen, bevor sie gespeichert wurden. –

+0

Es klingt tatsächlich so, als ob Sie die Daten durch doppeltes Entweichen der Daten bereinigt haben. Wenn Sie 'mysql_real_escape_string (" zwei \ nZeilen ") eingeben,' wird ein echtes '\ n' Zeichen in der Datenbank sein. Wenn Sie Daten auslesen, sollten Sie '\ n' nicht ersetzen müssen. Wenn Sie es so halten, erwarten Sie auch Probleme mit "und". – mvds

+0

Vielleicht sind Sie ein Opfer der lächerlichen "magic_quote" -Funktion in PHP - stellen Sie sicher, dass Sie es deaktivieren, es verwirrt nur diejenigen, die das Konzept kennen – mvds

Antwort

19
echo '<pre>'.str_replace('\n', "\n", $string).'</pre>'; 
+3

dies würde als "Quick Fix" funktionieren. Die Ursache ist die Daten zweimal Escape – Max

+0

Dies funktionierte nicht, bis ich aus irgendeinem Grund doppelte Anführungszeichen '\ n" 'anstelle von einfachen Anführungszeichen' \ n'' verwendete. –

2
str_replace("\\n","\n",$data); 
-3

Dies könnte ein wenig helfen:

echo ('test \ ntest'); zeigt als

Test Test

aber echo ("test \ ntest"); zeigt als

Test

Test

+1

echo ('test \ ntest'); sollte als test \ ntest erscheinen –

1

I Inhalt von einem DB ziehen würde, die unter Verwendung von mysql_real_escape_string hygienisiert worden ist. Dementsprechend sind die neuen Zeile Zeichen nun als „\ n“ erscheinen

Wenn Sie nichts zu den Rohdaten zog sich zurück aus der Datenbank dann die ptoblem ist getan habe, dass es zweimal ‚hygienisiert‘ wurde, wenn eingefügt.

C.

1

warum nicht ...

echo str_replace('\\n', PHP_EOL, "few lines\nof text here,\nblah, blah! etc!"); 
Verwandte Themen