如果我試圖訪問此URL http://localhost/common/news/33/+%E0%B0%95%E0%B1%87%E0%B0%B8.html,它顯示An An Error Was Encountered,您提交的URI不允許使用字符。我設置了$ config ['permitted_uri_chars'] ='a-z 0-9〜%。:?? _ = + - ?' ; ..// 我做的事 ?codeigniter不允許使用字符錯誤
回答
怎麼辦? 停止在URL中使用unicode字符 - 出於同樣的原因,您不應使用unicode字符在文件系統上命名文件。
但是,如果你真的需要它,我會複製/粘貼從配置一些行:
Leave blank to allow all characters -- but only if you are insane.
是的,如果你要允許非ASCII字節你就必須將它們添加到permitted_uri_chars
。該功能可以在URL解碼的字符串上運行(通常情況下,除非環境中有特殊情況),因此您必須將字符串中的逐字節放在字符串中,而不僅僅是%
和十六進制數字。 (是的,我說字節:_filter_uri
不使用Unicode正則表達式,所以你不能使用Unicode範圍。)
試圖篩選傳入的值(而不是編碼傳出的值)是一個可笑的基本錯誤,它是令人沮喪在流行的框架中找到。您可以通過將permitted_uri_chars
設置爲空字符串來關閉此錯誤導入的功能,或者您可能希望除控制代碼("\x20-\xFF"
)以外的所有字節範圍。不幸的是,_filter_uri
功能仍然瘋狂,瘋狂,破壞了一些輸入的東西,在一些未知的離奇原因的途中用HTML編碼了一些標點符號。你不會把它關掉。
這與破損的「反XSS」磨碎機一起,使我相信CodeIgniter團隊對字符串轉義和安全問題的實際工作方式有相當的瞭解。我不會相信他們在安全方面所說的任何話。
我不會建議嘗試解碼它們或使用任何其他技巧,而不是我會建議使用urlencode()和urldecode()函數。
由於我沒有你的代碼的副本,我不能添加例子,如果你可以給我一些例子,我可以告訴你一個例子如何做到這一點。
但是,它的使用非常簡單,它使用PHP4和PHP5構建。
我有類似的問題,並希望分享解決方案。這是重置密碼,我不得不發送用戶名和時間,因爲URL只會在一小時內激活。由於安全原因,Codeigniter不會接受URL中的某些字符,我不想改變它。因此,這裏是我做過什麼:
- CONCAT用戶名, '__',並在變量$ STR時間()使用MCRYPT_BLOWFISH
- 加密$海峽,這可能包含 '/', '+'
- 重新加密使用str2hex(從here得到它)
- 把編碼字符串中的鏈接通過電子郵件 發送,像第三個參數, http://xyz.com/users/resetpassword/3123213213ABCDEF238746238469898 - 你可以看到,該網址只包含0-9和AZ。
- 點擊郵件鏈接後,得到第3個uri段,使用 hex2str()解密爲blowfish加密字符串,然後應用 blowfish解密得到原始字符串。
- 分裂與「__」,以獲取用戶名和時間
我知道了將近一年,直到這個問題被問過,但我希望有人會發現這個解決方案有幫助來到這裏由谷歌後。
- 1. 不允許的密鑰字符CodeIgniter錯誤
- 2. Codeigniter(v2)中不允許的關鍵字符錯誤消息
- 3. CodeIgniter:不允許的關鍵字符
- 4. CodeIgniter中不允許的字符
- 5. Codeigniter - URI不允許的字符
- 6. 語法錯誤:不允許在字符串中使用符號「%」
- 7. 如何允許不允許的密鑰字符。在Codeigniter中?
- 8. CodeIgniter不允許使用QUERY_STRING的字符uri協議
- 9. 不允許字符
- 10. codeigniter set_rules允許更多字符
- 11. CSS允許/不允許字符
- 12. 不允許的方法錯誤使用
- 13. CodeIgniter - 不允許使用Singleton模式?
- 14. 不允許Codeigniter URL中的「@」符號
- 15. 錯誤:(23,26)不允許使用字符串類型(在'src'中使用值'pen')。
- 16. 錯誤:(453,69)不允許使用字符串類型(在'activity_horizontal_margin'中使用值'')
- 17. Android:字體錯誤:類型不允許。
- 18. Codeigniter上傳不允許的文件不會產生錯誤
- 19. GMOCK錯誤:MOCK_METHOD11不允許
- 20. 去錯誤%不允許
- 21. 不允許的字符笨
- 22. 傑克遜錯誤:不可接受的字符''(0x0)不允許特殊字符
- 23. Codeigniter數據庫錯誤,不允許我訪問我的網站
- 24. CodeIgniter錯誤:「您請求的操作不被允許。」
- 25. 錯誤:字符串類型不允許('ga_logLevel'值'詳細')
- 26. 的Eclipse/Android的錯誤:字符串類型不允許
- 27. mysql語法錯誤:mysql不允許某些字符被處理
- 28. Android - 錯誤:字符串類型不允許(在'imageViewScramble'值'')
- 29. Go-yaml控制字符是不允許的錯誤
- 30. w3c-在序言中不允許出現錯誤字符「v」
CodeIgniter會不會聰明地知道'%E0'是它自己的字符,超出了範圍?我知道如果我要指定什麼字符可以在一個URL(一個相當愚蠢的做法海事組織,但呃),我會先解碼它之前檢查他們。 – cHao 2010-11-04 17:14:56
爲什麼你有三次問號?我同意@cHao 100%。 – treeface 2010-11-04 17:15:58