Wie kann ich den Zeichensatz in $_REQUEST ermitteln? und wie kann ich den Zeichensatz von $_REQUEST einstellen?
Antworten
Zu viele Anzeigen?Um es kurz zu machen: Sie wissen nicht wirklich, welche Kodierung (Zeichensatz) für die Variablen verwendet wird, die per GET oder POST an Ihr PHP-Skript übergeben werden (insbesondere GET ist hier ein Problem). Normalerweise senden Browser POST-Formulare an die serverseitige Ressource, die in der action
-Attribut unter Verwendung der Seitenkodierung, die über eine der folgenden Optionen angegeben werden kann http-equiv
-meta-Tag ( charset
-meta-Tag in HTML5) oder über einen HTTP-Header. Alternativ dazu respektieren einige Browser auch die accept-charset
-Attribut auf dem Formular bei der Auswahl der richtigen Kodierung.
Die Kodierung der GET-Parameter und der URL selbst hängt von den Einstellungen des Browsers ab und kann daher vom Benutzer kontrolliert werden. Sie sollten sich nicht auf eine bestimmte Kodierung verlassen.
Im Allgemeinen können Sie die meisten kodierungsbezogenen Probleme umgehen, indem Sie konsequent UTF-8 für alles verwenden und die korrekte Kodierung im HTTP-Header angeben ( Content-Type: text/html; charset=UTF-8
) - dies führt zur korrekten Kodierung (UTF-8) in allen Variablen, die an die Zeichenkette übergeben werden (wir sprechen hier nicht von bösartigen Skripten, die absichtlich versuchen, die Kodierung zu verfälschen, um einige Angriffsvektoren in Ihr Skript einzubringen). Sie sollten sich auch nicht auf Nicht-Ascii-Zeichen in Ihren GET-Parametern oder in der URL verlassen (das ist auch ein Grund, warum SEO-freundliche Links diese Zeichen entfernen oder ersetzen).
Wenn Sie sichergestellt haben, dass UTF-8 der einzige erlaubte Zeichensatz ist, können Sie mb_strlen($string, 'UTF-8')
um z.B. die Länge einer Variablen zu überprüfen.
EDIT: (einige Links hinzugefügt)
Einige Dinge, die Sie lesen sollten:
Utiliser mb_interne_kodierung um zu wissen, welche Kodierung gerade eingestellt ist. Wenn Sie ein Protokoll mit einer anderen Kodierung verwenden, sollten Sie mb_strlen verwenden.
Prost
Normalerweise haben Sie die Kontrolle über die Zeichenkodierung, da Sie die $_REQUEST aus dem HTML-Code erstellen, den Sie an den Client senden.
d.h.: Sie wird von einer Seite generiert, die Sie aus PHP gesendet haben.
Daher sollten Sie die Kodierung nicht erkennen müssen.
Die Verwendung der mb_functions erfordert die Aktivierung der Multibyte-Erweiterung - wenn Sie also Code verteilen, müssen Sie sich darüber im Klaren sein, dass nicht jeder diese Erweiterung hat.
header('Content-Type: text/html; charset=UTF-8');
ODER in HTML:
<meta charset="utf-8">
http://www.w3.org/International/O-charset
Edit: PHP6 hat utf-8 Unterstützung, nicht PHP5.