您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)CodeIgniter中URL含有中文字符串如何解決,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
codeIgniter默認(rèn)的配置下是不允許URL中包含非ASCII字符的,如果URL中含非ASCII字符,那么CI會毫不客氣的拋出錯誤。本文章向碼農(nóng)介紹CodeIgniter 如何解決URL含有中文字符串。
你 可能會說,那我把這個URL使用函數(shù)urlencode一下呢?不行。因?yàn)閃eb Server會在接收到一個被urlencode的URL后自動將其decode,然后在PHP里得到的這些字符串轉(zhuǎn)換成他原來所代表的含義,并使用 Web Server自己的URL編碼字符集(IIS6 中文版是GBK,Apache 2.2是UTF-8)傳送給應(yīng)用程序,這就使得CI得到的URL已經(jīng)是一個解碼過的,無論你有沒有對URL進(jìn)行urlencode,瀏覽器在發(fā)出請求時會 自動檢測,若沒有,則會自動進(jìn)行編碼。所以,手動的進(jìn)行urlencode并不能解決問題。那么我們應(yīng)該怎么做來解決這個問題呢?
對于CI這種框架,用到現(xiàn)在,我的觀點(diǎn)是盡量不要去修改它,而是去擴(kuò)展他,CI提供了很好的擴(kuò)展機(jī)制,我們只需要在application/core/下(2.0版本以前的為application/libraries/)增加一個文件MY_URI.php,其內(nèi)容為:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class MY_URI extends CI_URI { /** * 自定義的url過濾函數(shù) * * @access private * @param string * @return string */ function _filter_uri($str) { if ($str != '' AND $this->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會將空格轉(zhuǎn)換成+,而CI的默認(rèn)配置中是不允許+出現(xiàn)在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中得到的中文信息是亂碼,不知道在你的服務(wù)器上會不會遇到該問題,但是我遇到了(IIS)。但是在本地是正常的,本地用的是apache。
好,我在程序中,把$_SERVER['REQUEST_URI']打印出來,發(fā)現(xiàn)它就是亂碼的,苦思冥想,這是怎么回事?這就說明在我得到uri中的參數(shù)之前,就已經(jīng)被編碼了,好,我們使用iconv解碼:
iconv("gb2312","UTF-8",$uri);
以上就是CodeIgniter中URL含有中文字符串如何解決,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。