我如何知道$ _REQUEST中的字符集? 以及如何設置$ _REQUEST的字符集?strlen,mb_strlen,哪個使用?
回答
簡而言之:您並不真正瞭解通過GET或POST傳遞給PHP腳本的變量上使用的編碼(字符集)(特別是GET在這裏是一個問題)。按照慣例,瀏覽器POST使用可通過http-equiv
-meta標記(HTML5中的charset
-meta標記)指定的頁面編碼或通過HTTP標題形式到action
-屬性中指定的服務器端資源。或者,某些瀏覽器在選擇正確的編碼時也會尊重表單上的屬性accept-charset
。
GET參數和URL本身的編碼取決於瀏覽器的界面,因此可以由用戶控制。你不應該依賴特定的編碼。
通常你會通過始終使用UTF-8的一切,並通過指定的HTTP報頭中的正確的編碼(Content-Type: text/html; charset=UTF-8
)環遊最編碼相關的問題 - 這將在所有產生正確的編碼(UTF-8)傳遞到你的字符串中的變量(我們不是在談論那些故意試圖混淆編碼以允許一些攻擊向量進入腳本的rouge腳本)。你也不應該依賴你的GET參數或URL中的非ASCII字符(這也是爲什麼搜索引擎友好鏈接刪除這些字符或替代它們的原因)。
如果確保UTF-8是唯一允許的字符集,則可以使用mb_strlen($string, 'UTF-8')
來檢查變量的長度。
編輯:(增加了一些鏈接)
有些東西給你看:
使用mb_internal_encoding知道當前設置了哪種編碼。如果您的應用程序使用不同編碼的日誌,最好使用mb_strlen。
乾杯
通常你的字符編碼的控制,因爲您從您發送給客戶端的HTML $ _REQUEST。
ie:它是由您從PHP發送的頁面生成的。
因此,您不應該檢測編碼。
使用mb_functions需要啓用多字節擴展 - 所以如果你要分發代碼,你必須意識到不是每個人都會擁有它。
header('Content-Type: text/html; charset=UTF-8');
或HTML:
<meta charset="utf-8">
http://www.w3.org/International/O-charset
編輯:PHP6有UTF-8的支持,而不是PHP5。
「字符串函數是UTF-8兼容」 。是不是意味着在php5中strlen會返回正確長度的utf8字符串? – lovespring 2009-09-19 06:14:34
「從PHP5開始,字符串函數與UTF-8兼容。」這肯定是不正確的。 PHP的內部字符串函數都在字節級別上運行,這意味着它們無法處理多字節字符(對PHP <6有效)。在使用這些字符集時,字符長度(以字節爲單位)對其操作非常重要的所有內部函數都容易出錯。提到的多字節擴展(mb_ *)具有超載能力,但我強烈建議不要使用它。 – 2009-09-19 12:30:48
我在那裏,PHP5沒有任何多字節支持。 – bucabay 2009-09-19 16:11:09
- 1. 爲什麼有人想用strlen代替mb_strlen
- 2. mb_strlen()&strlen()不會從Ajax調用返回正確的值到PHP
- 3. 哪種複雜性mb_strlen?
- 4. 爲什麼從後期值mb_strlen和strlen是不正確的PHP?
- 5. PHP函數iconv_strlen,mb_strlen和strlen之間有什麼區別?
- 6. PHP的strlen()也不mb_strlen()返回意外的結果
- 7. if(mb_strlen()!=#)問題
- 8. mb_strlen()夠了嗎?
- 9. PHP - 與mb_strlen
- 10. 使用strlen限制字符
- 11. 使用strlen裏面的sprintf
- 12. 使用strlen的錯誤
- 13. 奇怪的使用strlen
- 14. 嘗試使用strlen,但得到錯誤:'strlen'的衝突類型
- 15. 調用未定義函數yii \ web \ mb_strlen()
- 16. 緩衝區分配使用的strlen()
- 17. 使用strlen時的分段錯誤
- 18. 如何使用strlen()作爲int?
- 19. 使用strlen檢查字符串長度
- 20. strlen(string)和strlen(* string)之間的區別
- 21. C++的strlen(CH)和sizeof(CH)strlen的
- 22. 兩行STRLEN printf?
- 23. PHP strpos和strlen
- 24. 我誤解strlen()?
- 25. strlen in array
- 26. 計數textarea標誌正確php mb_strlen
- 27. 哪個layoutmanager使用?
- 28. 使用哪個「diagnostics.wadcfg」?
- 29. 是mb_strlen是一個合適的替代iconv_strlen
- 30. strlen要返回size_t?
URL的編碼也取決於引用文檔。只有直接在地址欄中輸入URL,瀏覽器的設置纔是關鍵。 – Gumbo 2009-09-19 13:07:21