4 Stimmen

Speichern von HTML in MySQL

Ich speichere HTML- und Textdaten in meiner Datenbanktabelle in ihrer Rohform - jedoch habe ich ein kleines Problem dabei, sie korrekt auszugeben. Hier sind einige Beispieldaten, die in der Tabelle WIE FOLGT gespeichert sind:

Professioneller freiberuflicher PHP- & MySQL-Entwickler mit Sitz in Manchester.Bietet einen unschlagbaren Service zu einem wettbewerbsfähigen Preis.

Um diese Daten auszugeben, mache ich folgendes:

echo $row['details'];

Und das gibt die Daten korrekt aus, jedoch wenn ich einen W3C-Validator-Check durchführe, heißt es:

Das Zeichen "&" ist das erste Zeichen eines Trennzeichens, trat jedoch als Daten auf.

Also habe ich versucht, htmlspecialchars und htmlentities zu verwenden, aber das führt nur dazu, dass die HTML-Tags auf der Seite ausgegeben werden.

Was ist der richtige Weg, dies zu tun?

10voto

newbie Punkte 1210

Verwenden Sie & anstelle von &.

5voto

pattyd Punkte 5639

Was du tun willst, ist die php Funktion htmlentities() verwenden...
Es wird deine Eingabe in HTML-Entitäten umwandeln, und wenn es ausgegeben wird, wird es als HTML interpretiert und als Ergebnis dieses HTML ausgegeben...
Zum Beispiel:

$mything = "BOLD & BOLD";
//normalerweise würde ein Fehler auftreten, wenn nicht konvertiert...
//lass uns konvertieren!!
$mynewthing = htmlentities($mything);

Jetzt, füge einfach $mynewthing in deine Datenbank ein!!

2voto

gd1 Punkte 11058

htmlentities ist im Grunde eine Erweiterung von htmlspecialchars und htmlspecialchars ersetzt auch < und >.

Eigentlich versuchen Sie, ungültigen HTML-Code zu reparieren, und ich denke, dass dies eine spezielle Lösung erfordert:

$row['details'] = preg_replace("/&(?![#0-9a-z]+;)/i", "&", $row['details']);

Dies ist keine perfekte Lösung, da sie für Zeichenketten wie: someone&son; (mit einem abschließenden ;) fehlschlagen wird, aber zumindest wird sie vorhandene HTML-Entitäten nicht brechen.

Wenn Sie jedoch die Entscheidungsbefugnis darüber haben, wie die Daten gespeichert werden, setzen Sie bitte durch, dass der im Datenbank gespeicherte HTML-Code korrekt ist.

0voto

lorado Punkte 336

In meinen Projekten verwende ich den XSLT-Parser, daher musste ich in ändern (zum Beispiel). Aber das ist der sicherste Weg, den ich gefunden habe...

Hier ist mein Code

$html = trim(addslashes(htmlspecialchars(
        html_entity_decode($_POST['html'], ENT_QUOTES, 'UTF-8'),
        ENT_QUOTES, 'UTF-8'
    )));

Und wenn Sie aus der Datenbank lesen, vergessen Sie nicht, stripslashes(); zu verwenden;

$html = stripslashes($mysq_row['html']);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X