Zeilenumbrüche entfernen

radarin

Angesehenes Mitglied
Hallo Liste, ich hab da ein Problem mit Zeilenumbrüchen aus einem TEXT-Feld einer Datenbank. Will ich diese auf der Webseite korrekt ausgeben, muss ich diese entsprechend umwandeln:

str_replace(chr(10),"<br>",$results_news[text])

Gebe ich direkt nur das Textfeld an, habe ich den kompletten Text auf einer Zeile. Nun verwende ich für Informationen von Links eine Art Infobox. In einem Layer zeige ich Informationen dazu an, was einem hinter dem Link erwartet. Gebe ich diese Daten direkt im Link fest an, funktionieren alle Formatierungen auch der <br>.

Im Veranstaltungskalender schneide ich aus Platzgründen den Link ab und deige dessen kompletten namen sowie einen Teil des Textfeldes aus der DB im Layer an. Mein Problem ist nun, kommt im Textfeld ein Zeilenumbruch vor, wird der Code nicht mehr weiter verarbeitet und die Funktion funktioniert nicht mehr, das heisst, beim überfahren des Links erscheint kein Layer. Ich hab mir deshalb überlegt was ich dagegen tun kann. Ersetze ich auch hier chr(10) gegen <br> nützt es nichts, auch   hilft nicht.

Mir ist aufgefallen, dass die Links die nicht funktionioeren im Quellcode den onmouseover auf mehrere Zeilen verteilen, immer dort wo im Textfeld ein Umbruch ist.

Hat jemand eine Idee was ich tun kann. Den kalender findet ihr auf www.kanton.sg
 
Was hast du denn für eine Fehlermeldung im Javascript? NN oder Mozilla schreiben Meldungen in der Console.

Bei mir muss ich z.B. auch alle chr(160) ersetzen, damit js funktioniert.
 
Nützt leider auch nichts. JS meldet keinen Fehler, da dieser nicht in der Fznktion selber entsteht, sondern anscheinend im Aufruf. Das ist der Code im File:

CODE

echo "<a href=\"index.php?page=events&mod=one&include=detail&e_id=$info_a[id]\" class=\"eventlink\" onmouseover=\"return escape('<b>$a_info</b><br><br>".str_replace(chr(10),"<br>",str_replace(chr(160),"<br>",substr($a_text,0,60)))."...')\">".substr($a_info,0,10)."</a>";




Und so sieht er im Quelltext des Browsers aus:


CODE

<a href="index.php?page=events&mod=one&include=detail&e_id=13" class="eventlink" onmouseover="return escape('<b>Eintrag (3)</b><br><br>3 Tage. In allen geändert...')">Eintrag (3+</a>

<a
href="index.php?page=events&mod=one&include=detail&e_id=13" class="eventlink" onmouseover="return escape('<b>Eintrag (3)</b>
<br>
<br>3 Tage. In allen geändert...')">Eintrag (3+</a>



Ersterer funktioniert, der zweite Link dann nicht mehr. Wobei ich mir jetzt auch nicht erklären kann, woher im Ersten die beiden <br> kommen, da in der DB alles auf einer Zeile steht.
 
JS beschwert sich schon.
QUOTE Fehler: C has no properties
Quelldatei: http://www.kanton.sg/index.php?page=events&mod=all
Zeile: 117


Ich verstehe nicht, was Du mit der chr's vorhast. Was ist 160?
Intuitiv würd ich jetzt einfach das probieren:

QUOTE echo "<a href=\"index.php?page=events&mod=one&include=detail&e_id=$info_a[id]\" class=\"eventlink\" onmouseover=\"return escape('<b>$a_info</b><br><br>".str_replace("\n", "", nl2br(substr($a_text,0,60)))."...')\">".substr($a_info,0,10)."</a>";


Die beiden <br>'s stehen ja im Code.
 
160 ist ein space-zeichen, dass jedenfalls bei Zeilenumbrüchen in Textareas mitgesetzt wird.
js gibt dann einen syntaxfehler aus: nicht abgeschlossener string oder sowas.
 
Das muss ich ausprobieren wenn ich wieder im Büro bin. Der derzeitige Code hat jedenfalls zur Folge dass es nur noch im Explorer funktioniert, nicht aber mehr im Firefox...
 
Hallo radarin,



da gehe von der Überschrift von etwas leichten aus und es wird sich hier wirklich schwer getan diese kleinen zusätzlichen Schwierigkeiten zu beheben. Nur leider beschreibst Du Dein Problem auch nicht vernünftig.
  • Welche Programmiersprache verwendest Du?
  • Wie sieht der Quellcode aus?
  • Was soll wie genau geschehen?
  • Wo liegen die Probleme?
  • Was geschieht stattdessen?
Du musst wohl nicht alle Fragen beanworten können, aber die ersten drei sind dabei schon ziemlich hilfreich.


Erstmal gibt es eine PHP-Funktion, welche Zeilenumbrüche in (X)HTML-Umbrüche (<br />) umwandeln kann. [1]


Desweiten wäre es ganz Hilfreich, dass Du wie oben bereits erwähnt, den entsprechenden PHP-Ausschnitt hier hereinstellen würdest und ggf. auch eine etwas besser Beschreibung dazu gibst: "Was soll eigentlich wie geschehen?".
Doch ich gebe mal eine Antwort bei der ich vermute, dass sie wohl richtig sein könnte. Ich gehe bei den verwendeten Mittel dazu mal von PHP aus, bis es leztenendlich zur Ausgabe kommt.
Ich schätze mal, Du musst einfach nur den String abschneiden bzw. kürzen und dann vorher einmal alle Whitespaces [2] am Anfang und Ende entfernen [3]. Zum Schluss ersetzt Du dann mit der Funktion nl2br() die Zeilenumbrüche innerhalb des restlichen Textes und gibst diesen dann aus.
Vom Prinzip ist es schon beinahe das Gleiche wie der Code von Alain Aubert, nur das dieser nich vorher die Whitespaces vom Anfang und Ende des Strings entfernt.



MfG Sascha Ahlers
 
Also der Vorschlag von Alain funktioniert leider auch nicht (nl3br). Sascha, mit deiner Vermutung dass es sich um PHP handelt liegst Du richtig. Das Problem liegt sicher nicht im JavaScript. So wie ich es interpretiere liegt das Problem wie der Quelltext im Browser daherkommt. Habe ich das Attribut

CODE onmouseover="return escape('<b>Titel</b><br><br>Text zum Eintrag. Funktioniert...')"


im A HREF auf einer Zeile funktioniert es wie es sollte, es geht beim Überfahren des Links ein Layer auf mit dem Inhalt des onmousover's. Habe ich im Quelltext das Attribut


CODE onmouseover="return escape('<b>Titel</b><br><br>Text zum Eintrag.
<br \>Funktioniert nicht...')"


allerdings auf mehr als eine Zeile verteilt, so scheint mir der Befehl nicht mehr interpretiert werden zu können.

Das Feld in der Datenbank ($a_text) ist vom Typ 'text' und wird über eine <textarea> gefüllt. Es können also über die Enter-Taste Zeilenumbrüche eingefügt werden. Ich muss nun diese aber alle rauskriegen, damit der Quellcode nicht umbrochen wird...

Ja, ich weiss, schmarrn Problem
mad.gif
 
Hab nun für die Preview-Ansicht des Textes im Layer ein zusätzliches Feld in der DB angelegt, vom Typ 'varchar'. Vor dem Eintragen versuche ich die Umbrüche zu entfernen:

CODE $text_preview = str_replace("\n","",$_POST['text']);
$text_preview = str_replace(chr(10),"",$text_preview);


Im Feld sind aber weiterhin alle Umbrüche vorhanden, anstatt dass der String auf einer einzigen Zeile daher kommt...

Wer das Verhalten auf der Seite Testen möchte (www.kanton.sg), das Passwort zum Testeintrag vom 22.7.2005 lautet 1234
 
von der db zu javascript:

$text=str_replace(array(chr(13),chr(10),chr(160),'\\','"','(',')','\'','`'),array(' ','',' ','','\"','\\(','\\)','\\\'','\`'),$text);

Ein POST-Textfeldvalue mit &nbsp spaces mit einem php-string in einer js-funktion vergleichen:
if (userInput == "<? echo str_replace (' ',chr(160),$str) ?>"

sonst solltest du mal schauen, was für ascii- zeichen in dem text vorkommen, die ersetzt werden müssen:

CODE function ascii_encode($string)  {
  for ($i=0; $i < strlen($string); $i++)  {
      $encoded .= '&#'.ord(substr($string,$i)).';';    
  }
  return $encoded;
}




code stammt von merwetta_at_hotmail.com (php manual)
 
Danke Tuemmel, Dein erster Vorschlag hat die Lösung gebracht, der entfernt alles was den Script irritieren könnte, jetzt funktioniert es bestens!
 
Zurück
Oben