Come posso conoscere il set di caratteri in $ _REQUEST? e come impostare il set di caratteri di $ _REQUEST?strlen, mb_strlen, quale usare?
risposta
Per farla breve: non si conosce veramente la codifica (set di caratteri) utilizzato sulle variabili che vengono passate allo script PHP tramite GET o POST (specialmente GET è un problema qui). Per convenzione i formulari POST alla risorsa lato server specificati nell'attributo action
utilizzando la codifica della pagina che può essere specificata tramite un tag http-equiv
-meta-tag (charset
-meta-tag in HTML5) o tramite un'intestazione HTTP. In alternativa alcuni browser rispettano anche l'attributo accept-charset
nel modulo quando si sceglie la codifica corretta.
La codifica dei parametri GET e l'URL stesso dipendono dalle impunture del browser e possono quindi essere controllate dall'utente. Non dovresti fare affidamento su una codifica specifica.
In genere circumnavigate la maggior parte dei problemi relativi alla codifica utilizzando costantemente UTF-8 per qualsiasi cosa e specificando la codifica corretta nell'intestazione HTTP (Content-Type: text/html; charset=UTF-8
) - questo produrrà la codifica corretta (UTF-8) in tutto le variabili che vengono passate nella stringa (non stiamo parlando di script rouge che deliberatamente provano a fare confusione con la codifica per consentire alcuni vettori di attacco nel tuo script). Inoltre non dovresti fare affidamento su caratteri non ascii nei tuoi parametri GET o nell'URL (questo è anche un motivo per cui i link SEO-friendly rimuovono quei caratteri o li sostituiscono).
Se si è accertato che UTF-8 è l'unico set di caratteri consentito, è possibile utilizzare mb_strlen($string, 'UTF-8')
per verificare la lunghezza di una variabile, ad esempio.
EDIT: (aggiunto alcuni link)
Alcune cose per voi a leggere:
utilizzare mb_internal_encoding per sapere quale codifica è attualmente impostata. Se l'applicazione utilizza un registro di codifica diversa, è meglio utilizzare mb_strlen.
Acclamazioni
Di solito si hanno il controllo della codifica dei caratteri da quando si crea il $ _REQUEST dal codice HTML si invia al client.
es .: Viene generato da una pagina inviata da PHP.
Pertanto non è necessario rilevare la codifica.
L'utilizzo di mb_functions richiede l'attivazione dell'estensione multibyte, quindi se si sta distribuendo il codice, è necessario essere consapevoli che non tutti lo avranno.
header('Content-Type: text/html; charset=UTF-8');
O in HTML:
<meta charset="utf-8">
http://www.w3.org/International/O-charset
Edit: php6 ha il supporto UTF-8, non PHP5.
“le funzioni di stringa sono UTF-8 compatibile” . significa che strlen in php5 restituirà la lunghezza corretta della stringa utf8? – lovespring
"A partire da PHP5, le funzioni di stringa sono compatibili con UTF-8." Questo non è assolutamente corretto. Le funzioni di stringa interna di PHP operano tutte a livello di byte, il che significa che non possono gestire caratteri a più byte (valido per PHP <6). Tutte le funzioni interne in cui la lunghezza di un carattere (in byte) è importante per il suo funzionamento sono soggette a errori quando si lavora con quei set di caratteri. L'estensione multibyte citata (mb_ *) ha un'abilità di sovraccarico ma sconsiglio vivamente di usarla. –
Ero lontano da lì, PHP5 non ha alcun supporto multibyte. – bucabay
- 1. mb_strlen() è sufficiente?
- 2. Come posso usare strlen in php per persiano?
- 3. annotazioni SAL, quale usare?
- 4. Quale plugin jade.vim usare?
- 5. Quale PreApplicationStartMethod dovrei usare?
- 6. Quale contenitore STL usare?
- 7. Quale CursorAdapter devo usare?
- 8. Quale doctype dovrei usare?
- 9. Quale D compilatore usare?
- 10. quale algoritmo dovrei usare?
- 11. Quale interprete LOLCODE usare?
- 12. Quale struttura dati usare?
- 13. Sizeof vs STRLEN
- 14. Quick strlen question
- 15. libunistring u8_strlen() equivale a strlen()?
- 16. quale di == e =: = dovrei usare?
- 17. Quale dovrei usare? decimal.Add() o "+"
- 18. quale contesto usare nel servizio?
- 19. Quale usare, XMP o RDF?
- 20. Quale controllo sorgente dovremmo usare
- 21. Quale wiki usare dopo MediaWiki?
- 22. Quale dichiarazione DOCTYPE dovremmo usare?
- 23. Quale installazione Python dovrei usare?
- 24. Quale codec audio dovrei usare?
- 25. Quale pacchetto postgresql dovrei usare?
- 26. Quale classloader usare con Parcel.readHashMap?
- 27. Quale GWT EventBus dovrei usare?
- 28. Quale libreria XML Haskell usare?
- 29. Liquibase vs Flyway quale usare?
- 30. Quale versione hadoop da usare?
La codifica dell'URL dipende anche dal documento di riferimento. Solo se l'URL viene inserito direttamente nella barra degli indirizzi, le impostazioni del browser sono fondamentali. – Gumbo