Wie kann ich den Zeichensatz in $ _REQUEST wissen? und wie setzt man den Zeichensatz von $ _REQUEST?strlen, mb_strlen, welche verwenden?
Antwort
Um es kurz zu machen: Sie wissen nicht wirklich über die Kodierung (Zeichensatz) für die Variablen, die über GET oder POST an Ihr PHP-Skript übergeben werden (besonders GET ist hier ein Problem). Per Konvention bildet der POST die serverseitige Ressource, die im action
-Attribut angegeben ist, unter Verwendung der Seitencodierung, die über einen http-equiv
-meta-Tag (charset
-Meta-Tag in HTML5) oder über einen HTTP-Header spezifiziert werden kann. Alternativ berücksichtigen einige Browser auch das accept-charset
-Attribut auf dem Formular bei der Auswahl der richtigen Codierung.
Die Codierung der GET-Parameter und der URL selbst hängt von den Browser-Einstellungen ab und kann daher vom Benutzer gesteuert werden. Sie sollten sich nicht auf eine bestimmte Kodierung verlassen.
Im Allgemeinen werden Sie die meisten codierungsbezogenen Probleme umgehen, indem Sie konsequent UTF-8 für alles verwenden und die korrekte Codierung im HTTP-Header angeben (Content-Type: text/html; charset=UTF-8
). Dies ergibt die korrekte Codierung (UTF-8) die Variablen, die an Ihre Zeichenfolge übergeben werden (wir sprechen nicht über Rouge-Skripts, die absichtlich versuchen, sich mit der Codierung zu befassen, um Angriffsvektoren in Ihr Skript zu ermöglichen). 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 zulässige Zeichensatz ist, können Sie mb_strlen($string, 'UTF-8')
verwenden, um beispielsweise die Länge einer Variablen zu überprüfen.
EDIT: (hinzugefügt einige Links)
Einige Dinge für Sie zu lesen:
Verwenden Sie mb_internal_encoding um zu wissen, welche Kodierung gerade eingestellt ist. Wenn Sie ein Protokoll mit einer anderen Kodierung verwenden, verwenden Sie besser mb_strlen. Normalerweise
Prost
Sie haben die Kontrolle über die Zeichencodierung, da Sie die $ _REQUEST aus dem HTML erstellen Sie an den Client senden.
IE: Es wird von einer Seite generiert, die Sie von PHP gesendet haben.
Daher sollten Sie die Codierung nicht erkennen müssen.
Die Verwendung der mb_functions erfordert die Aktivierung der Multibyte-Erweiterung - wenn Sie also Code verteilen, müssen Sie sich bewusst sein, dass nicht jeder ihn haben wird.
header('Content-Type: text/html; charset=UTF-8');
OR in HTML:
<meta charset="utf-8">
http://www.w3.org/International/O-charset
Edit: PHP6 utf-8-Unterstützung hat, nicht PHP5.
„die String-Funktionen sind UTF-8 kompatibel“ . bedeutet es, dass strlen in php5 die korrekte Länge von utf8 string zurückgibt? – lovespring
"Ab PHP5 sind die Zeichenfolgenfunktionen UTF-8-kompatibel." Das ist definitiv nicht korrekt. Die internen String-Funktionen von PHP arbeiten alle auf Byte-Ebene, was bedeutet, dass sie nicht mit Multi-Byte-Zeichen umgehen können (gültig für PHP <6). Alle internen Funktionen, bei denen die Länge eines Zeichens (in Bytes) wichtig für die Operation ist, sind fehleranfällig, wenn mit diesen Zeichensätzen gearbeitet wird. Die erwähnte Multibyte-Erweiterung (mb_ *) ist überladbar, aber ich rate dringend davon ab. –
Ich war weit weg, PHP5 hat keine Multibyte-Unterstützung. – bucabay
- 1. mb_strlen() ist es genug?
- 2. PHP: polnische nationale Zeichen in $ _POST - strlen und mb_strlen falsche Werte
- 3. libunistring u8_strlen() entspricht strlen()?
- 4. Strlen() Implementierung in GCC
- 5. strlen: wie funktioniert es?
- 6. Min Zeichenlänge, strlen?
- 7. Sizeof vs Strlen
- 8. Strlen von char * malloc
- 9. Wie kann ich Strlen in PHP für Persisch verwenden?
- 10. strlen Funktion Rekursion in c
- 11. Ist die Kompilierzeit "strlen()" wirksam?
- 12. strlen() nicht mit String Arbeitsvariable
- 13. Schnelle Strlen mit Bit-Operationen
- 14. Welche jpcap-Bibliothek verwenden?
- 15. Welche Tabellen verwenden Änderungsverfolgung
- 16. Welche Technologien verwenden?
- 17. Welche generische Sammlung verwenden?
- 18. Welche Sortiermethode verwenden Sie?
- 19. Welche HTTP-Methode verwenden?
- 20. SAL-Annotationen, welche verwenden?
- 21. Datenstrukturen - wann welche verwenden?
- 22. Welche Algorithmen verwenden RDBMS?
- 23. Umgang mit char * in C# (Strlen-Funktion?)
- 24. Warum gibt PHP strlen() negative Länge zurück?
- 25. php strlen Funktion und 2 vars
- 26. Warum strlen() immer 2 oder 1 zurückgibt?
- 27. wie funktioniert Strlen Zahl Unicode in c
- 28. strlen gibt keine korrekte Stringlänge C
- 29. Warum arbeitet Strlen nicht für mich?
- 30. mit strlen das Ende einer Zeichenfolge
Die Codierung der URL hängt auch vom verweisenden Dokument ab. Nur wenn die URL direkt in der Adressleiste eingegeben wird, sind die Einstellungen des Browsers entscheidend. – Gumbo