Ich verwende accept-charset="utf-8" -Attribut im Formular und habe festgestellt, dass die Header, wenn ein Formular mit nicht-ascii gepostet wird, unterschiedliche accept charset-Optionen im Anfrage-Header haben. Gibt es etwas, das ich vermisse? Mein Formular sieht so aus.
%Vor%Vielen Dank im Voraus
Die Frage ist, wie gesagt, widersprüchlich: Die Überschrift besagt, dass der Parameter accept-charset
nichts tut, wohingegen der Fragenkörper sagt, dass wenn das accept-charset
-Attribut (das ist der korrekte Ausdruck) verwendet wird, Msgstr "Die Kopfzeilen haben im Anforderungsheader eine andere Option zum Akzeptieren von Zeichen". Ich nehme an, dass eine Negation in letzterer Aussage fehlt.
Browser senden Accept-Charset
-Parameter in HTTP-Anforderungsheadern nach ihren eigenen Prinzipien und Einstellungen. Zum Beispiel sendet mein Chrome Accept-Charset:windows-1252,utf-8;q=0.7,*;q=0.3
. Ein solcher Header wird normalerweise von serverseitiger Software ignoriert, aber er könnte verwendet werden (und er wurde entwickelt, um verwendet zu werden), um zu bestimmen, welche Kodierung in der Serverantwort verwendet werden soll, falls die serverseitige Software (ein Form-Handler) , in diesem Fall) kann verschiedene Codierungen in der Antwort verwenden.
Das accept-charset
-Attribut in einem form
-Element wird sich nicht auf HTTP-Anforderungsheader auswirken und tut dies auch nicht. Es soll die Zeichencodierung angeben, die für die Formulardaten in der Anfrage verwendet werden soll, und das ist es, was es tatsächlich tut. Die HTML 4.01-Spezifikation ist unklar darüber , aber die W3C HTML5-Entwurf bringt es viel besser, obwohl aus irgendeinem seltsamen Grund uses plural: "gibt die Zeichenkodierungen an, die für die Einreichung verwendet werden sollen". Ich nehme an, der Grund ist, dass Sie alternative Kodierungen angeben können, um Situationen vorzubereiten, in denen ein Browser Ihre bevorzugte Kodierung nicht verwenden kann. Was beispielsweise in Chrome passiert, ist, dass wenn Sie accept-charset="foobar utt-8"
verwenden, UTF-8 verwendet wird.
In der Praxis wird das Attribut verwendet, um die Codierung der Datenübergabe von der Codierung der Seite zu unterscheiden, die das Formular enthält. Angenommen, Ihre Seite ist ISO-8859-1-codiert und jemand gibt griechische oder hebräische Buchstaben in Ihr Formular ein. Browser müssen einige Fehler beheben, da diese Zeichen in ISO-8859-1 nicht dargestellt werden können. (In der Praxis verwandeln sie die Zeichen in numerische Zeichenreferenzen, was logischerweise alles falsch, aber pragmatisch vielleicht das Beste ist, was sie tun können.)% Co_de% hilft hier: Unabhängig von der Kodierung werden die Formulardaten als UTF- 8 Codierung, die mit jedem Zeichen umgehen kann.
Wenn Sie dem Formular-Handler mitteilen möchten, welche Kodierung er in seiner Antwort verwenden soll, können Sie dafür ein verstecktes (oder nicht verstecktes) Feld in das Formular einfügen.
Tags und Links html forms spring-mvc encoding freemarker