Jean-Jacques: Formatübernahme aus Datenbank - Sonderzeichen umwandeln

Hallo zusammen,

Folgendes Problem liegt zu Grunde:

Ich möchte für eine Homepage eine Newsseite coden. Da nachher auch Benutzer News schreiben sollen, die keine Ahnung von html o.ä. haben, habe ich zu diesem Zweck eine Datenbank gemacht, in die über ein Formular (Textfeld) die News gepostet werden.

Damit die Zeilenumbrüche in der Nachricht übernommen werden, und auch nicht die Umlaute entsprechend geschrieben werden müssen, habe ich mit der variablen

$text = nl2br(htmlentities($text));

gearbeitet. Soweit funktionierte auch alles.

Nun wurde ich gefragt, ob ich den Code dahingehend ändern könne, so dass die Umlaute weiterhin umgewandelt werden, die Zeilenumbrüche weiterhin bestehen bleiben, es aber noch Formatierungsmöglichkeiten und Verlinkungsmöglichkeiten geben kann.

Bei der aktuellen variablen werden leider auch alle html tags in html code umgewandelt, so dass es als Zeichen ausgegeben wird, eine Formatierung (<b>) bzw Verlinkung (<a>) wird mir auch entsprechend als Text angezeigt und nicht verlinkt. Bei meiner Suche im www habe ich auch keine entsprechende Funktion gefunden, mit der Umlaute konvertiert werden, aber die < > Zeichen nicht konvertiert werden.

Gibt es diese Funktion wirklich nicht, und wenn nicht, wie muss ich dann vorgehen? Eine Replace funktion für jeden Umlaut?

Es wäre schön, wenn mir einer einen Wink mit dem Zaunpfahl dabei geben könnte, ich sehe gerade keinen Ausweg mehr.

Danke und viele Grüße

Jean-Jacques.

  1. Hi!

    Dein Problem ist leicht mit UTF-8 loesbar. Da koennen Deine User auch asiatische Schriftzeichen eingeben, wenn sie lustig sind. Dafuer sollte natuerlich alles UTF-8 codiert sein (DB, HTML, PHP)

    Eigentlich willst Du aber gar nicht, dass deine User HTML eingeben koennen. Vielleicht magst du etwas mit strip_tags experimentieren.

  2. echo $begrüßung;

    Damit die Zeilenumbrüche in der Nachricht übernommen werden, und auch nicht die Umlaute entsprechend geschrieben werden müssen, habe ich mit der variablen
    $text = nl2br(htmlentities($text));
    gearbeitet. Soweit funktionierte auch alles.

    Umlaute entsprechend zu schreiben, bedeutet eigentlich nur, sie gemäß der angegebenen Kodierung zu kodieren. Damit fällt schon mal das htmlentities() weg. Übrig bleibt htmlspecialchars(), das dir die HTML-eigenen Zeichen behandelt, denn die willst du sicher nicht als Code interpretiert wissen. Zu viel Unsinn kann man damit anstellen. Mach es lieber andersrum - Vorschlag folgt.

    Nun wurde ich gefragt, ob ich den Code dahingehend ändern könne, so dass die Umlaute weiterhin umgewandelt werden, die Zeilenumbrüche weiterhin bestehen bleiben, es aber noch Formatierungsmöglichkeiten und Verlinkungsmöglichkeiten geben kann.

    Punkt 1 fällt weg, Punkt 2 bleibt. Hinzukommen kann: ein BBCode-Parser. Damit kannst du genau den Funktionsumfang festlegen, den du guten Gewissens unterstützen kannst.

    echo "$verabschiedung $name";