Nochmal nl2br rückgängig -> eine herausforderung

hpvw

Erfahrenes Mitglied
Ich habe ein paar news, die ordentlich hingeschrieben werden:
$text=htmlspecialchar($text);
$text=nl2br($text);

Zum antworten sollen die News in einem hidden-Input wieder erscheinen und an die Antwortseite übergeben werden. Und zwar, wie man es von eMail-Progs kennt:
Deine Nachricht
> erste Zeile
> zweite Zeile
> usw.

also mache ich:
$text='> '.str_replace('<BR>','> ',$text);
Dabei kommt leider dieses raus:
Deine Nachricht
> Erste Zeile
>
Zweite Zeile
>
Dritte Zeile
>
usw.
hat jemand eine Ahnung, wie ich die Überflüssigen Zeilenumbrüche loswerde?
Ich habe es mit
$text='> '.str_replace('<BR>\n','> ',$text);
versucht, aber das haut nicht hin???

Was muss ich anstelle von \n zum ersetzen einfügen???

Danke für jede Idee

Gruß hpvw
 
Versuche es mal so:

PHP:
$text = str_replace("zu ersetzenden text", "neuer Text", $text);
ein Beispiel:

PHP:
$text = str_replace("ich", "du", $text);
jedes wort mit ich wird durch du ersetzt

so das sollte helfen
cya
 
also so wie ich das verstanden habe musst du
PHP:
str_replace("<BR>","<BR>>",$text);

machen

2b
 
Wenn ich <BR> durch <BR>> ersetze
kommt das '<BR>>' leider in Klartext in das Antwortformular.
hinter dem <BR> ist ein Zeilenumbruch und den würde ich gerne wegkriegen. (Davor ist auch noch einer, der soll aber bleiben)
Im Quelltext sieht das so aus:

Erste Zeile
<BR>
Zweite Zeile

Angezeigt wird natürlich

Erste Zeile
Zweite Zeile

Daraus soll

> Erste Zeile
> Zweite Zeile

werden

So soll es in der Textarea erscheinen

Wenn ich jedoch <BR> durch '> ' ersetze kommt

>
Erste Zeile
>
Zweite Zeile

in die TextArea
'<BR>\n' durch '> ' ersetzen funktioniert nicht.
Der Zeilenumbruch steht da irgendwie anders in dem string.

Hat jemand eine Idee, wie der Zeilenumbruch noch zu finden ist?
 
poste mal den ganzen relevanten code. damit ich mal durchsehe, wie du das alles ausliest und umwandelst und in welcher reihenfolge...

2b
 
In der DB steht der reine Text, wie vom User eingegeben, also OHNE vorher mit nl2br oder specialchar zu verhühnern.

Hier der Code:
PHP:
function newstable($id) {
 //daten aus db holen:
 include("connectdb.php4");
 $result=mysql_query("SELECT * FROM news WHERE ID='$id';");
 if ($n=mysql_fetch_array($result)) {
   $subject=$n["subject"];



   //hier wird was mit $text gemacht
   $text=htmlspecialchars($n["ntext"]);
   $text   =nl2br($text);



   $author =$n["sender"];
   $date   =$n["sendtime"];
  $result2=mysql_query("SELECT * FROM user WHERE ID='$author';");
   if ($u=mysql_fetch_array($result2)) {
     $author=$u["name"];
    }
   else {
     $author="unbekannt";
    }

  if (empty($subject)) {$subject='Ohne Titel';}
  if (empty($text))    {$text='Ohne Worte!';}

//Jetzt sind alle Daten da!!!

  echo "  ...einige HTML-Formatierungen und Ausgaben ausgelassen...
          <TD class=\"boxmain\" colspan=2>$text
          ...einige HTML-Formatierungen und Ausgaben ausgelassen...\n";


 //hier wird nochmal was mit $text gemacht
 // an dieser Stelle fehlt mir auch noch der entscheidene Hint
 $text = '> '.str_replace('<br>' , '> ' , $text );



  echo "  ...einige HTML-Formatierungen und Ausgaben ausgelassen...
       <TD align=left>
        <FORM action=\"pnVERFASSEN.php4\" method=post> //muss POST sein, wg. längere Nachrichten
         <input type=hidden name=to value=\"$author\">
         <input type=hidden name=subject value=\"RE: $subject\">
         <input type=hidden name=text value=\"Deine News vom $date\n$text\">
         <input type=submit value=\"&rarr;&nbsp;PN&nbsp;an&nbsp;$author\" class=link>
...einige HTML-Formatierungen und Ausgaben ausgelassen...\n";
 }
}//newstable zuende
 
Na wenn du schon den Text in "Reinform" (ohne nl2br und htmlspecialchars) verfügbar hast, warum wandelst du die dann nicht gleich in die Zitierform um? Sollte doch kein Problem darstellen, oder?


reima
 
Das ist gar nicht so leicht mit dem quoten

Ich habe jetzt vor dem eintragen in das hidden feld versucht mir noch mal den Originaltext zu holen und dann die Zeilenumbrüche zu ersetzen:

PHP:
 $text=$n["ntext"];
 $text = '> '.str_replace('\n' , '\n> ' , $text );

Das funzt aber auch nicht. In dem reinen Text stehen die Zeilenumbrüche anscheinend nicht als '\n' sondern irgendwie anders.
Wenn mir jetzt jemand sagen kann, wie ich die Zeilenumbrüche finde (ausser über \n), dann ist das Problem gelöst.
Der Haken ist auch, dass bei nl2br() weiter Zeilenumbrüche eingefügt bzw. beibehalten werden.
Oder kennt jemand eine funktion str_quote() oder so ähnlich???
 
Dochdoch, das sind normalerweise schon reine Zeilenumbrüche. Das Problem ist nur, dass du alle \n ersetzt, nicht aber die Zeilenumbrüche ;)
So geht's:
PHP:
<?
$text = "> ".str_replace("\n", "\n> ", $text );
?>


reima
 
So ersetzt er leider überhaupt nichts.
'\n' findet er nicht und ersetzt deswegen auch nichts.
Ich habe noch eine Idee, wer weiss, wie man in PHP Ascii-Zeichen in Strings darstellt (Ascii 13 + Ascii 10)?
 

Neue Beiträge

Zurück