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
-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:open_mouth:penWindow(‚bla bla bla
bla bla bla‘)
Sind aber Umlaute in $Text vorhanden sieht der Aufruf wie folgt aus und das Fenster geht nicht auf:
javascript:open_mouth:penWindow(‚Äh bla bla bla
%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.
hast Du ein Doctype spezifiziert und wird auch richtig encoded?
vielleicht solltest Du ja auch ein htmlspecialchars($Text) anwenden…
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:open_mouth:penWindow(‚bla bla bla
bla bla bla‘)
Sind aber Umlaute in $Text vorhanden sieht der Aufruf wie
folgt aus und das Fenster geht nicht auf:
javascript:open_mouth:penWindow(‚Äh bla bla bla
%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:open_mouth:penWindow(‚Äh bla bla bla
%0D%0A bla
bla bla Äh‘)
du musst also noch etwas wie ereg_replace("[\n\r]+",’’,$txt) machen
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?
Muss ich noch was ändern?
naja… für Dein Problem hilft
addslashes()
bzw im popup dann wohl noch
stripslashes()
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?
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 „Beschreibung“;
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.
wenn Du mir den Link zu Deinem popup schickst kann ichs mir ja mal ansehen
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*
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:
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‘);
und (das Popup) textshow.php:
neu geöffnete Seite
<?php echo "".stripslashes($text); ?\> Das mit den HTMLFormatierung hier im Posting habe ich nicht geschafft, keine Zeit fuer weitere Versuche. Gruss Joachim