[PHP] HTML entfernen aber <br> erlauben

G

Gast977

Guest
PHP:
	$_POST['Nachricht'] = nl2br(htmlentities($_POST['Nachricht']));


hm, irgendwie glaub ich nich das das alleine ausreicht, das ergebnis war das ich keine <br>'s mehr habe :(
ich lerne zwar grad erst php, aber dafür scheiter ich an den kleinsten dingen, das nervt...

schließlich hab ich auf der seite wo ich das brauche, schon echt die heftigsten dinger geproggt ^^

[edit] weils mir so gut gefällt hier php code zu posten hab ich mal die schriftgröße etwas vergrößert, nu kann man es auch ordentlich lesen

mir fällt auf das wir hier mehr coder im forum brauchen, oder ich sollte ein anderes forum für meine dummen fragen nutzen ^^
 

Lebenssonde

Aktives Mitglied
Für HTML Entfernung kannst du die Funktion

string strip_tags(string $str [, string $allowable_tags])

benutzen. Als zweites Argument goibst du alle erlaubten HTML Tags.

also in deinem Fall strip_tags($_POST["Nachricht"],"<br>");

Das entfernt aber die Tags komplett.

Auf die Schnelle würd mir folgende Lösung mit Entities einfallen

<?php $_POST['Nachricht'] =str_replace("&lt;br&gt;","<br>",htmlentities($_POST['Nachricht'])); ?>

Das ist quasi manuelle umkehrung für <br> Tag
 
G

Gast977

Guest
also mit

PHP:
	$_POST['Nachricht'] = strip_tags($_POST["Nachricht"],"<br>");

erhalte ich das:
Code:
hier mal ein test lala und noch ein test ;)

und das is leider ohne br, ich schau mal in der sql nach was da drin steht *schau*

re

in der mysql daten bank ist der text mit umbrüchen, aber kein <br> gespeichert sondern einfach im text.... irgendwas mach ich falsch Oo
 

Lebenssonde

Aktives Mitglied
Achso. Wenn es in der SQL Datenbank nicht als <br> gespeichert, ist es als Zeilenumbruch \n kodiert. Ist also kein HTML!

Zeilenumbrucvh in HTML wandeln: $ergebnis = str_replace("\n","<br>,$string);

aber lass mich erstmal nachdenken. dann wäre nl2br ja richtig.... ich dachte du wolltest die html code weglöschen und <br> belassen

Muss ich auch erstmal rumspielen. Wenn du Zeit bis morgen hättest....
 
G

Gast977

Guest
jo ich hab zeit bis dezember, bis dahin muss die seite fertig sein xD

hier mal ein test
lala und noch
ein test ;)

steht in der db, also ohne <br> oder /n ...
 

Lebenssonde

Aktives Mitglied
Du siehst da natürlich nicht \n, sondern den Zeilenumbruch. Das Zeichen ist unsichtbar. Er wird aber trotzdem als \n kodiert. Er ist am Ende jeder Zeile. Versuch mal ohne den htmlentities Befehl, also echo nl2br($_POST["Nachricht"]); In Seitenquelltext muss also <br> kommen
 
G

Gast977

Guest
also wenn ich nur

$_POST['Nachricht'] = nl2br($_POST["Nachricht"]);

mache dann nimmt der aber doch den html code mit... >.<
also was is nun die richtige lösung, ich will doch nur das man im gästebuch keinen scheiss macht damit da nix kaputt geht :(
 

Lebenssonde

Aktives Mitglied
Hey, mit der oberen Teil wollte ich nur prüfen, ob nl2br bei dir die Richtige Lösung liefert, als die Nl2 wirklich zu <br>s macht. Habe cih zwar nicht daran gezweifelt, ich möchte dir aber zeigen, wie ich die Fehlerfindung betreibe. Denn Fehlerfindung ist wirklich ein ganz wichtiges Kapitel, wenn du später bei komplizierteren Scripts nicht tagelang an einer ";" sitzen musst. Ehrlich ich habe schon so viel erlebt, dass cih mir fast die Haare gerauft habe, weil ich irgendwo ein Semikolumn vergessen habe. Oder einfach ein logisches Fehler, der noch schwerer aufzuspüren ist, weil es gar keine Fehlermeldung angezeigt wird.

<?php $_POST['Nachricht'] = nl2br(htmlentities($_POST['Nachricht'])); ?>

Eiegtnlich sehe ich in deinem Ansatz keinen Fehler. Ich weiss jetzt auch nicht warum er die <br> wegnimmt bei dir. Ich habe die Aufgabe anfangs auch falsch verstanden.

Versuch das mal in zwei Schritten:

$Nachricht = htmlentities($_POST['Nachricht']);
$Nachricht = nl2br($Nachricht);

Ich würde aber wirklich die strip_tags benutzen, wenn du es "sicherer" haben willst. Damit wird alles HTML ausser <br> weggelöscht:

$_POST['Nachricht'] = nl2br($_POST['Nachricht']);
$_POST['Nachricht'] = strip_tags($_POST["Nachricht"],"<br>");


Aber mal ne ganz andere Frage: übergibst du die Nachricht aus einem Formular? Wieso denn das, wenn du es aus Datenbank holst? Oder willst du, dass die die über Formular eingegebene NAchricht in die DB geschrieben wird? Dann brauchst du die nl2br eigentlich nicht an dieser Stelle. Ich verwende nl2br nur bei Ausgabe. Die Eingabe speichere ich so wie sie auch im Formular eingegeben wird.

Was die Sicherheit in dem Falle angeht, muss du auch die SQL Injections irgendwie abfangen. Nur so als ein weiteres Informationsthema für dich ;)


Die Lebenssonde
 
G

Gast977

Guest
mhm ich dachte eigentlich das ich das formatiert speicher... okay wenn es nur in der ausgabe gemacht werden muss... daaaannn

okay klär mich auf wegen der sql injections =)
 
G

Gast977

Guest
okay habs nun in der ausgabe gemacht

PHP:
nl2br(strip_tags($linksrow[3]))

das funzt nu ^^
 

Lebenssonde

Aktives Mitglied
Nun es ist dir überlassen, wo und wie du Daten speicherst. Aber wenn du den Originaltext speicherst, hast du Vorteil, dass du dieselben Daten an verschiedenen Stellen verschieden formatieren und ausgeben kannst.

Schön. Zu SQL Injections gibt es hier schönes Text: http://de.wikipedia.org/wiki/SQL-Injection

Kurz ist es eine Methode per Dateneingabe eine beliebige SQL Anweisung auf dem Opfersystem auszuführen, wie Daten löschen, ausspionieren usw.

Die Lebenssonde
 
Oben