\r\n trotz nl2br()

Wipeout

Erfahrenes Mitglied
Hallo Community,

irgendwie verstehe ich grade die Welt nicht mehr ;)

Ich habe folgenden Code

PHP:
<?php
/*Fehler Abfrage anschalten*/
ini_set("display_errors", 0);
error_reporting(E_ALL);
/*Datenbankverbindung herstellen*/
$verbindung=dbzugang($host,$uname,$pass);
/*Tabellenname aus Config.php auslesen und SQL Statement für dieses Script*/
$seitenname=$titlenews;
$table=$news;
$sql="SELECT * FROM " . $table ." ORDER BY news_id DESC";
/*Daten auslesen aus der Datenbank mit SQL Statement*/
$sqlanfrage=dbauslesen($verbindung,$table,$db,$sql);
/*Wen keine Einträge vorhanden sind fehler ausgeben*/
if (mysql_num_rows($sqlanfrage)== 0)
    {
        echo'<div class="fehler"><h2 class="fehler">Es sind noch keine Einträge vorhanden</h2></div>';
        exit;
    }
    else
        {
        while($daten=mysql_fetch_array($sqlanfrage))
        {
               /*Datenbank Daten variablen zu Ordnen*/
                $datum=$daten['news_datum'];
                $day=mktime(substr($datum,11,12),substr($datum,14,15),substr($datum,17,18),substr($datum,5,6),substr($datum,8,9),substr($datum,0,4));
                $name=$daten['news_autor'];
                $text=$daten['news_text'];
                $text=nl2br($text);
                $text=mysql_real_escape_string($text);
                $text=utf8_encode($text);
                $text=Smily($text);
                $text=BBCode($text);
                $text=badwords($text,$badlist);
                $i++;
                ?>
            <? /*Ausgabe der Variablen*/ ?>
       <div class='ausgabe'>
                 <div class='ausgabeueberschrift'>
                        &nbsp;<b><? echo $name; ?></b> schrieb am  <b><? echo date('d.m.Y',$day); ?></b> folgendes :
                 </div>
                 <div class='ausgabekomplett'>
                        <? echo $text; ?>
                </div>
        </div>
<?
        }
    }
mysql_close($verbindung);
?>

In der Ausgabe werden aber trotzdem \r\n angezeigt.
Nachzusehen ist das hier

Die eingabe selber wird momentan noch per PHPMyAdmin vorgenommen, da ich noch nicht dazu gekommen bin diese zu proggen ;)

Meine Frage besteht jetzt warum das so ist ****

Hat jemand ne Idee ****?
 
Hab var_dump($daten['news_text']); zum script hinzugefügt und hoch geladen
Kannst Du nun unter obigen Link anschauen ;)
 
Hallo Wipeout,

das Problem ist, dass die \r\n selbst als "normale Buchstaben" (statt als Steuerzeichen) im Text integriert sind.

Denn beim Quelltext zeigt mir Google Chrome diese Zeichen auch an, statt wirkliche Leerzeilen zu erzeugen.

Beim var_dump stecken anscheinend die Steuerzeichen noch drinne.
 
Nope, das Problem ist mysql_real_escape_string().
Das braucht man, wenn man etwas in die DB schreiben will, nicht beim auslesen.
Im Source auf deinem Link, sieht man dass \n\r nicht im String drin sind
Code:
string(32) "Smily Test

:-)
:-(
;-)
:-P"

Wenn ich mal mit diesem String teste, sieht man es sehr schnell das Problem
PHP:
$text = <<<TXT
Smily Test

:-)
:-(
;-)
:-P
TXT;


var_dump('original:', $text);
$text=nl2br($text);
var_dump('nach nl2br():', $text);

$text=mysql_real_escape_string($text);
var_dump('nach mysql_real_escape_string():', $text);

$text=utf8_encode($text);
var_dump('nach utf8_encode():', $text);

Ergibt das folgende Resultat
Code:
string(8) "original:"
string(32) "Smily Test

:-)
:-(
;-)
:-P"
string(12) "nach nl2br():"
string(62) "Smily Test<br />
<br />
:-)<br />
:-(<br />
;-)<br />
:-P"
string(31) "nach mysql_real_escape_string():"
string(72) "Smily Test<br />\r\n<br />\r\n:-)<br />\r\n:-(<br />\r\n;-)<br />\r\n:-P"
string(18) "nach utf8_encode():"
string(72) "Smily Test<br />\r\n<br />\r\n:-)<br />\r\n:-(<br />\r\n;-)<br />\r\n:-P"

Also, weg mit mysql_real_escape_string();
 
Oh dann habe ich das mit dem mysql_real_escape_string(); falsch verstanden dachte immer das wäre für die ausgabe ;)
 
Man benutzt diese Funktion, damit nicht gefährliche Befehle von außerhalb in das MySQL-Query eingeschleust werden können ("SQL Injection").
 
Jo danke war ein gedankenfehler meinerseits ;)
Das kommt davon wen man sich nur alle paar Wochen mit sowas mal beschäftigt wen man die Zeit hat ;)

Auf jedenfall danke an alle ;)
 
Zurück