2009-06-29 6 views
13

Ich möchte auf UTF8 auf unserer Website standardisieren. Alle unsere Datenbanken und Internet-Sachen sind in UTF8. Alle unsere Webserver senden den HTTP-Header charset=utf-8. Ich habe jedoch entdeckt, dass ich durch die Änderung der Kodierung in meinem Firefox (Ansicht -> Zeichenkodierung) etwas anderes in ein Formular ein Latein-9-Zeichen eingeben kann und PHP behandelt sie einfach als missgebildetes UTF8.Kann ich Webbrowser zwingen, Formulartext als UTF8 zu senden?

Wie viel muss ich mir darüber Gedanken machen? Ist es möglich, dass der Webbrowser des Benutzers den UTF8-Zeichensatzheader überschreibt und nicht-UTF8 sendet?

Update: Mehrere Personen haben accept-charset auf den einzelnen Formen vorgeschlagen. Ich möchte jedoch nicht jedes Webformular ändern müssen. Angenommen, ich kann den Header des HTTP-Inhaltstyps steuern, und er ist auf UTF8 eingestellt, muss ich mich darum kümmern?

+0

"Alle unsere Datenbanken und Internet-Sachen" - all Ihre Internet-Sachen gehören uns. –

+0

Gemäß der akzeptierten Antwort auf [diese Frage] (http://stackoverflow.com/questions/3719974/is-there-any-benefit-to-adding-accept-charset-utf-8-to-html-forms- if-the-page) löst 'accept-charset' das spezifische Problem, das Sie entdeckt haben: Dh wenn der Benutzer seinen Browser anweist, die Seite als Nicht-UTF-8 zu interpretieren, sollte' accept-charset' den Browser senden Inhalte trotzdem als UTF-8 formatieren.Ob es gegen diese besondere Situation geschützt ist, ist es wert, all Ihren Formen das Attribut hinzuzufügen, nun, das ist Ihr Urteilsspruch. –

+1

stellen Sie sicher, dass Ihre Seite wirklich utf-8 ist; Suchen Sie im Browser-Debugger nach dem gesendeten Content-Type-Header. Bewerten Sie in der JS-Konsole document.charset; sollte eine Schreibweise von utf8 zurückgeben. 'windows-1252' bedeutet möglicherweise, dass der Browser die gesendete Kodierung nicht erkennt. – OsamaBinLogin

Antwort

3

Versuchen Sie, Ihren Formularelementen das Attribut accept-charset hinzuzufügen.

2

Platzieren Sie ein accept-charset = "UTF-8" -Element auf dem Formularelement, wodurch der Formularpost trotz der Codierung des Seiteninhalts UTF-8 wird.

10

Ist es möglich, dass der Web-Browser die UTF-8-Zeichensatz Header und sendet nicht-UTF8 des Benutzers außer Kraft setzen?

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 Junk (oder was als Junk deklariert wird) an Ihren Server gesendet werden.

Das heißt, es klingt wie Sie die meisten wichtigen Schritte hier vorgenommen haben. Ihr aktuelles HTML-Dokument ist UTF-8-codiert und explizit als solches gekennzeichnet. Dies bedeutet, dass Browser standardmäßig auch Formulare in dieser Codierung senden. (Beachten Sie, dass die HTML-Spezifikation dies nicht erfordert. Die Angabe accept-charset auf dem Formular explizit ist die einzige spezifikationskonforme Garantie.) Ich vermute, dass dies wie erwartet in allen modernen Browsern funktioniert, und Sie könnten dies problemlos testen.

Auf dem Server ist Ihr Job immer, um Ihre Eingaben in dem Maße zu validieren, wie es für Ihren Service wichtig ist. Obwohl die überwiegende Mehrheit Ihrer Benutzer wohlwollend ist und moderne Standard-Browser verwendet, ist das HTTP-Protokoll offen, und sowohl verrückte Benutzer als auch böswillige Hacker sind da draußen, und beide können jede Art von Daten, die sie wollen, auf Sie übertragen. Stellen Sie sicher, dass Sie keine Annahmen über Datencodierungen machen, wenn Sicherheitsdaten oder authentifizierte Daten betroffen sind, und bereinigen Sie diese Daten, bevor Sie sie in Datenbanken verschieben.

4

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

So könnte die Verarbeitung der Eingabe bei der Einreichung ein besserer Weg sein.

Verwandte Themen