23 Stimmen

strlen, mb_strlen, was ist zu verwenden?

Wie kann ich den Zeichensatz in $_REQUEST ermitteln? und wie kann ich den Zeichensatz von $_REQUEST einstellen?

22voto

Stefan Gehrig Punkte 80686

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:

5voto

RageZ Punkte 25926

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

1voto

bucabay Punkte 5059

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.

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