CodeIgniter 如何解決URL含有中文字串,codeigniterurl_PHP教程

來源:互聯網
上載者:User

CodeIgniter 如何解決URL含有中文字串,codeigniterurl


codeIgniter預設的配置下是不允許URL中包含非ASCII字元的,如果URL中含非ASCII字元,那麼CI會毫不客氣的拋出錯誤。本文章向碼農介紹CodeIgniter 如何解決URL含有中文字串。

你 可能會說,那我把這個URL使用函數urlencode一下呢?不行。因為Web Server會在接收到一個被urlencode的URL後自動將其decode,然後在PHP裡得到的這些字串轉換成他原來所代表的含義,並使用 Web Server自己的URL編碼字元集(IIS6 中文版是GBK,Apache 2.2是UTF-8)傳送給應用程式,這就使得CI得到的URL已經是一個解碼過的,無論你有沒有對URL進行urlencode,瀏覽器在發出請求時會 自動檢測,若沒有,則會自動進行編碼。所以,手動的進行urlencode並不能解決問題。那麼我們應該怎麼做來解決這個問題呢?

對於CI這種架構,用到現在,我的觀點是盡量不要去修改它,而是去擴充他,CI提供了很好的擴充機制,我們只需要在application/core/下(2.0版本以前的為application/libraries/)增加一個檔案MY_URI.php,其內容為:

config->item('permitted_uri_chars') != '')          {              $str = urlencode($str);              if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))              {                  exit('The URI you submitted has disallowed characters.');              }              $str = urldecode($str);          }          return $str;      }    }  

我覆蓋了原來CI_URI中的_filter_uri方法,這樣就可以使得中文的URL通過檢測。但是,如果URL裡有空格, 也不行了,怎麼辦呢?原來,urlencode會將空格轉換成+,而CI的預設配置中是不允許+出現在URL裡的,OK,把

$config ['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; 

改成

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\+\-';  

就可以了。

或者

第一步把config.php 中的

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';    

替換成

$config['permitted_uri_chars'] ='a-z 0-9~%.:_-u4e00-u9fa5';    

面所有的操作我們都做完了,但是接下來你可能又遇到了新的問題,那就是url中得到的中文資訊是亂碼,不知道在你的伺服器上會不會遇到該問題,但是我遇到了(IIS)。但是在本地是正常的,本地用的是apache。

好,我在程式中,把$_SERVER['REQUEST_URI']列印出來,發現它就是亂碼的,苦思冥想,這是怎麼回事?這就說明在我得到uri中的參數之前,就已經被編碼了,好,我們使用iconv解碼:

iconv("gb2312","UTF-8",$uri);

現在列印出來看看,好了,原來的中文參數列印出來了,是正確的。

這個問題解決了,但是還是有一個疑問,url為什麼是gb2312編碼的呢,如果在我的程式中使用(我採用的是utf-8編碼),還需要轉換為utf-8編碼,是不是和web伺服器是有關係的呢,希望大家能夠幫忙解答。

原文地址:http://www.manongjc.com/article/808.html

codeIgniter相關閱讀:

  • CodeIgniter URL
  • CodeIgniter 控制器
  • CodeIgniter 保留名稱
  • CodeIgniter 視圖
  • CodeIgniter 模型
  • CodeIgniter 輔助函數
  • CodeIgniter 類庫
  • CodeIgniter 建立類庫
  • CodeIgniter 磁碟機
  • CodeIgniter 建立磁碟機
  • CodeIgniter 核心類
  • CodeIgniter 附屬類
  • CodeIgniter 鉤子
  • CodeIgniter 自動載入
  • CodeIgniter 公用函數
  • CodeIgniter 相容性函數
  • CodeIgniter URI 路由
  • CodeIgniter 錯誤處理
  • CodeIgniter 網頁緩衝
  • CodeIgniter 分析器類
  • CodeIgniter CLI 方式運行
  • CodeIgniter 管理應用程式
  • CodeIgniter 處理多環境
  • CodeIgniter 替代文法
  • CodeIgniter 安全
  • CodeIgniter 開發規範
  • codeigniter 路由(URL) 最佳化分析與講解
  • CodeIgniter架構如何去掉url中的index.php

http://www.bkjia.com/PHPjc/1125999.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1125999.htmlTechArticleCodeIgniter 如何解決URL含有中文字串,codeigniterurl codeIgniter預設的配置下是不允許URL中包含非ASCII字元的,如果URL中含非ASCII字元,那麼CI會...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.