15 Stimmen

Kann ich Webbrowser dazu zwingen, Formulartext als UTF8 zu senden?

Ich möchte auf unserer Website UTF8 als Standard verwenden. Alle unsere Datenbanken und Internet-Sachen sind in UTF8. Alle unsere Webserver senden die charset=utf-8 HTTP-Header. Ich habe jedoch herausgefunden, dass ich durch Ändern der Kodierung in meinem Firefox (Ansicht -> Zeichenkodierung) ein Latin-9-Zeichen in ein Formular eingeben kann, und PHP behandelt es einfach als missgebildetes UTF8.

Wie sehr muss ich mir darüber Gedanken machen? Ist es möglich, dass der Webbrowser des Benutzers den UTF8-Charset-Header außer Kraft setzt und nicht UTF8 sendet?

Update : Mehrere Personen haben vorgeschlagen accept-charset auf den einzelnen Formularen. Allerdings möchte ich nicht jedes Webformular ändern müssen. Angenommen, ich kann den HTTP-Content-Type-Header kontrollieren, und er ist auf UTF8 eingestellt, muss ich mir dann Sorgen machen?

0 Stimmen

"Alle unsere Datenbanken und Internet-Stationen

1 Stimmen

Stellen Sie sicher, dass Ihre Seite wirklich utf-8 ist; suchen Sie im Browser-Debugger nach dem Content-Type-Header, der gesendet wird. Auch in JS-Konsole, bewerten document.charset; sollte einige Schreibweise von utf8 zurückgeben. Windows-1252" bedeutet vielleicht, dass der Browser die gesendete Kodierung nicht erkennt.

12voto

Ben Zotto Punkte 68632

I Browser den utf8-Zeichensatz außer Kraft setzen zu überschreiben und nicht-UTF8 zu senden?

Ja, natürlich. Sie haben keine Kontrolle über den Client, und der Client kann tun, was er will, einschließlich der Möglichkeit, dass Benutzer die normalen Kodierungen außer Kraft setzen und Müll (oder das, was als Müll durchgeht) an Ihren Server senden.

Abgesehen davon klingt es so, als hätten Sie die meisten wichtigen Schritte bereits unternommen. Ihr aktuelles HTML-Dokument ist UTF-8 kodiert und explizit als solches gekennzeichnet, was bedeutet, dass Browser in der Regel standardmäßig Formulare auch in dieser Kodierung übermitteln werden. (Beachten Sie, dass die HTML-Spezifikation dies nicht vorschreibt. Das Angeben der accept-charset auf dem Formular ist ausdrücklich die einzige spezifizierungskonform Garantie). Ich vermute, dass dies in allen modernen Browsern wie erwartet funktioniert, und Sie können dies leicht testen.

Auf dem Server besteht Ihre Aufgabe darin siempre um Ihre Eingaben zu validieren, soweit sie für Ihren Dienst wichtig sind. Obwohl die überwiegende Mehrheit Ihrer Benutzer wohlwollend ist und moderne Standardbrowser verwendet, ist das HTTP-Protokoll offen, und es gibt sowohl verrückte Benutzer als auch böswillige Hacker, und beide können Ihnen jede Art von Daten zuwerfen, die sie wollen. Stellen Sie sicher, dass Sie keine Annahmen über Datenkodierungen treffen, wenn es um Sicherheits- oder authentifizierte Daten geht, und bereinigen Sie diese Daten, bevor Sie sie in Datenbanken eingeben.

4voto

B Seven Punkte 41683

Ich denke, die beste Lösung ist, in UTF-8 zu konvertieren und alle Nicht-UTF-8-Zeichen zu behandeln, wenn der Benutzer die Daten eingibt. Wie oben erwähnt, ist die accept-charset="UTF-8" garantiert nicht, dass die Daten UTF-8 sind. Und wenn Sie die Formulare auf Ihrer gesamten Website ändern müssen, ist dies keine gute Lösung.

Daher könnte die Verarbeitung der Eingaben bei der Übermittlung ein besserer Weg sein.

3voto

Lars Haugseth Punkte 14242

Versuchen Sie, die accept-charset Attribut zu Ihren Formularelementen hinzufügen.

2voto

AnthonyWJones Punkte 182582

Platzieren Sie ein accept-charset="UTF-8"-Element auf dem Formularelement, das bewirkt, dass das Formular trotz der Kodierung des Seiteninhalts in UTF-8 gepostet wird.

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