Funktion nl2br() Umlaute mit FireFox

Von: , Frage gestellt am Mo, 12. Nov 2007

Hallo,
ich verwende die PHP-Funktion nl2br(). Diese Funktion soll alle Zeilenumbrüche innerhalb eines Strings ($Text="bla bla bla \n bla bla bla") in <br>-Tag's umwandeln sodas der Text im Browser richtig dargestellt wird. Die String-Variable $Text beziehe ich aus einer MySQL-Datenbank, wandele sie mit nl2br() um und übergebe sie an eine JavaScript-Funktion "OpenWindow($Text)" die den Text in einem neuen Fenster ausgeben soll.
Mit dem IE funktioniert das auch. Der FF öffnet das Fenster aber nur wenn keine Umlaute(äöüÜÖÄ) im Text vorhanden sind. In diesem Fall sieht der Funktionsaufruf in FF wie folgt aus und das Fenster öffnet sich:
javascript:OpenWindow('bla bla bla <br/>bla bla bla')
Sind aber Umlaute in $Text vorhanden sieht der Aufruf wie folgt aus und das Fenster geht nicht auf:
javascript:OpenWindow('Äh bla bla bla <br/>%0D%0A bla bla bla Äh')
Ist kein Zeilenumbruch vorhanden geht das Fenster ebenfals auf und zeigt $Text richtig an.
Woran liegt das und wie stellt man das ab?
Das ganze übrigens unter XAMPP mit Apache-2.0.48 Testumgebung auf dem lokalen Rechner.

8 Antworten zu dieser Frage

  1. Antwort von nach 16 Stunden 0 hilfreich
    Re: Funktion nl2br() Umlaute mit FireFox

    hast Du ein Doctype spezifiziert und wird auch richtig encoded?
    vielleicht solltest Du ja auch ein htmlspecialchars($Text) anwenden...

  2. Antwort von nach 17 Stunden 0 hilfreich
    Re: Funktion nl2br() Umlaute mit FireFox

    Die String-Variable
    $Text beziehe ich aus einer MySQL-Datenbank, wandele sie mit
    nl2br() um und übergebe sie an eine JavaScript-Funktion
    "OpenWindow($Text)" die den Text in einem neuen Fenster
    ausgeben soll.
    Mit dem IE funktioniert das auch. Der FF öffnet das Fenster
    aber nur wenn keine Umlaute(äöüÜÖÄ) im Text vorhanden sind. In
    diesem Fall sieht der Funktionsaufruf in FF wie folgt aus und
    das Fenster öffnet sich:
    javascript:OpenWindow('bla bla bla <br/>bla bla bla')
    Sind aber Umlaute in $Text vorhanden sieht der Aufruf wie
    folgt aus und das Fenster geht nicht auf:
    javascript:OpenWindow('Äh bla bla bla <br/>%0D%0A bla
    bla bla Äh')
    Ist kein Zeilenumbruch vorhanden geht das Fenster ebenfals auf
    und zeigt $Text richtig an.
    firefox versucht die umlaute zu maskieren.
    dein eigentliches problem sit aber, dass nl2br die newlseines ncith entfernt sondern davor ein br einfuegt - %0d%0a sollte man als dos-zeilenumbruch erkennen: javascript:OpenWindow('Äh bla bla bla <br/>%0D%0A bla
    bla bla Äh')
    du musst also noch etwas wie ereg_replace("[\n\r]+",'',$txt) machen

    • Antwort von nach 22 Stunden 0 hilfreich
      Re^2: Funktion nl2br() Umlaute mit FireFox

      du musst also noch etwas wie ereg_replace("[\n\r]+",'',$txt)
      machen
      Danke die "%0D%0A" sind jetzt weg und das Fenster öffnet sich.
      Ich habe aber jetzt ein neues Problem mit einfachen Anführungszeichen im Text. Wenn diese im Text vorhanden sind öffnet sich das Fenster auch nicht und zwar nicht nur im FF sondern auch im IE. Insgesammt verwende ich jetzt folgendes Umformungs-Statement:

      $Text = ereg_replace("[\n\r]+", '', nl2br(htmlentities($Text, ENT_QUOTES )));

      Muss ich noch was ändern?

      • Antwort von nach 23 Stunden 0 hilfreich
        Re^3: Funktion nl2br() Umlaute mit FireFox

        Muss ich noch was ändern?
        naja... für Dein Problem hilft
        addslashes()
        bzw im popup dann wohl noch
        stripslashes()

        • Antwort von nach einem Tag 0 hilfreich
          Re^4: Funktion nl2br() Umlaute mit FireFox

          naja... für Dein Problem hilft
          addslashes()
          bzw im popup dann wohl noch
          stripslashes()
          Das wird ja immer komplizierter.
          Gibt es da nicht eine Anleitung wie man einen Text mit Umlauten Zeilenumbruch und Anführungsstrichen in einem Popup-Window ausgibt und zwar für alle Browser?

          • Antwort von nach 2 Tagen 0 hilfreich
            Zeilenschaltung mit FireFox

            Hallo,
            die Darstellung der Umlaute ist bei Firefox sehr problematisch,
            manche Webseiten zeigen sie nicht richtig an, Zeichenkodierung muss immer wieder verstellt werden.
            Das liegt aber an der schlampigen Programmierung, die deutschen Zeichen sind eben zu konvertieren nach & auml; usw.,
            genau das habe ich aber unten nicht getan, sondern nur den Zeilenumbruch behandelt.
            Mein Vorschlag als, das rufende Programm:
            <html><head>
            <script language="JavaScript">
            var i,j,c,
            text='',
            zeilen = new Array("Zeile1","'A\"","Zeile3\nZeile4","äöüßÄÖÜ","Zeile6");
            document.write('</head><body>');
            for (j = 0; j < 5; j++) {
            for (i = 0; i<zeilen[j].length; i++) {
            c=zeilen[j].charAt(i);
            if (c<' ') c='<br>';
            text=text+c;
            }
            text=text+'<br>';
            }
            document.write(text);
            Text=window.open('textshow.php?text='+text,'','left=360');
            </script>
            </body></html>
            und (das Popup) textshow.php:
            <html><head></head><body>
            neu geöffnete Seite<br>
            <?php
            echo "<br>".stripslashes($text);
            ?>
            </body></html>
            Das mit den HTMLFormatierung hier im Posting habe ich nicht geschafft,
            keine Zeit fuer weitere Versuche.
            Gruss Joachim

        • Antwort von nach einem Tag 0 hilfreich
          Re^4: Funktion nl2br() Umlaute mit FireFox

          Hallo,

          Das Maskieren der Anführungszeichen nach dem Auslesen aus der Datenbank funktioniert nicht. Ich hab es mit htmlentities() und addslashes() und beidem probiert.
          Was aber funktioniert ist wenn man die Anführungszeichen bereits vor dem Eintrag in die Datenbank mit addslashes() maskiert!. Nach dem Auslesen muss man dann aber aus unerfindlichen Gründen die Ausrüfungszeichen nochmals mit htmlentities() maskieren. Als Letztes dann noch die Zeilenumbrüche mit nl2br() einfügen:
          ------------------------------------------------------------------------------
          $Beschreibung = nl2br(htmlentities($row['Beschreibung'], ENT_QUOTES));
          echo "<a href=\" javascript:OpenWindow('$Beschreibung') \">Beschreibung</a>";
          ------------------------------------------------------------------------------
          Damit funktioniert es jetzt. Blöd ist nur das man bei einer manuellen Eingabe in die Datenbank mit phpMyAdmin die Maskierung leicht vergessen kann und dann geht es wieder nicht. Ich glaube das Ganze ist auch deshalb so kompliziert weil die Anzahl der verschiedenen Anführungszeichen nicht ausreicht um alles richtig darzustellen. Ich muss ja bereits im echo-Aufruf die ersten Anführungszeichen Maskieren. Wenn jemand noch eine Bessere Lösung hat die ohne Maskierung vor dem Datenbankeintrag auskommt bitte mal melden.

          • Antwort von nach 2 Tagen 0 hilfreich
            Re^5: Funktion nl2br() Umlaute mit FireFox

            wenn Du mir den Link zu Deinem popup schickst kann ichs mir ja mal ansehen ;-P
            Wie ich schon sagte denke ich, dass eigentlich ein richtiges Character Set schon ausreichen würde um es richtig anzuzeigen...
            Ich bin aber generell kein Freund von JavaScript und erzwungenen Popups...
            davon abgesehen:
            Wenn Du
            echo 'text';
            machst funktioniert das genauso wie ein
            echo "text";
            Nur musst Du dann wieder die Apostroph-Zeichen maskieren ;)
            Dafür dann aber nicht die Gänsefüsschen *g*

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!