Frage

Ich habe ein wenig Mühe eine klebrige Form zu machen, die sich erinnern, was in ihm auf Formular-Vorlage eingegeben wird, wenn der Wert doppelte Anführungszeichen hat. Das Problem ist, dass das HTML soll so etwas wie lesen:

<input type="text" name="something" value="Whatever value you entered" />

Wenn jedoch der Satz: „Wie kann ich das tun?“ mit Anführungszeichen eingegeben wird, ist die resultierende HTML ähnelt:

<input type="text" this?="" do="" i="" how="" value="" name="something"/>

Wie habe ich die doppelten Anführungszeichen filtern? Ich habe es versucht, mit Magic Quotes auf und ab, habe ich strip und addslashes verwendet, aber bisher habe ich über die richtige Lösung nicht kommen. Was ist der beste Weg, um dieses Problem für PHP zu bekommen?

War es hilfreich?

Lösung

Sie wollen htmlentities () .

<input type="text" value="<?php echo htmlentities($myValue); ?>">

Andere Tipps

Das oben wird alle Arten von Zeichen kodieren, die HTML-Entity-Code. Ich ziehe es zu verwenden:

htmlspecialchars($myValue, ENT_QUOTES, 'utf-8');

Dies wird nur kodieren:

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'

Sie können auch eine strip_tags auf den $ myValue Sie HTML und PHP-Tags zu entfernen.

Dies ist, was ich benutze:

htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, 'UTF-8')
  • ENT_QUOTES sagt PHP sowohl einzelne als auch doppelte Anführungszeichen zu konvertieren, die ich für wünschenswert.
  • ENT_SUBSTITUTE und ENT_DISALLOWED Deal mit ungültigen Unicode. Sie sind sehr ähnlich - soweit ich es verstehe, die ersten Ersatz ungültigen Code Einheitssequenzen, dh invalidly codierte Zeichen oder Sequenzen, die keine Zeichen darstellen , während die zweite Ersatz ungültige Codepunkte für das jeweilige Dokument Typ, dh Zeichen, die für den Dokumenttyp nicht spezifiziert ist erlaubt (oder der Standard, wenn nicht explizit angegeben). Die Dokumentation ist unerwünscht lakonisch auf sich.
  • ENT_HTML5 ist der Dokumenttyp I verwendet werden. Sie können ein anderes verwenden, aber es sollte Ihre Seite Doctype entsprechen.
  • UTF-8 ist die Codierung von meinem Dokument. Ich schlage vor, dass, wenn Sie absolut sicher sind Sie mit PHP 5.4.0, Sie explizit der Codierung angeben - vor allem, wenn Sie mit nicht-englischem Text zu tun werden. Ein Host ich einige Arbeit auf Anwendungen 5.2.something, die standardmäßig auf ISO-8859-1 und produziert Kauderwelsch.

theSmart vermuten läßt, htmlspecialchars kodiert nur reservierte HTML-Zeichen, während htmlentities alles umwandelt, die eine HTML-Darstellung hat. In den meisten Kontexten entweder wird die Arbeit machen. Hier ist eine Diskussion über das Thema.

Eine weitere Sache: Es ist ein Best-Practice-magic quotes deaktiviert zu halten, da sie ein falsches Gefühl der Sicherheit geben und sind in 5.3.0 als veraltet und aus 5.4.0 entfernt. Wenn sie aktiviert sind, wird jedes Zitat in Ihre Felder durch einen umgekehrten Schrägstrich auf Postbacks vorangestellt werden (und mehrere Postbacks wird mehr und mehr Schrägstriche hinzufügen). Ich sehe, dass die OP der Lage ist, die Einstellung zu ändern, sondern auch für zukünftige Referenzen: Wenn Sie auf einem gemeinsamen Host oder sonst keinen Zugang zu php.ini haben, ist der einfachste Weg addieren

php_flag magic_quotes_gpc Off

auf die .htaccess Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top