`
天梯梦
  • 浏览: 13731932 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

CodeIgniter中URL含有中文字符串的解决方案

阅读更多

codeIgniter默认的配置下是不允许URL中包含非ASCII字符的,如果我们有这样一个字符串:

http://www.example.com/photo/ 北京/鸟巢.jpg
那么CI会毫不客气的告诉你:
The URI you submitted has disallowed characters.


你 可能会说,那我把这个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/libraries/下增加一个文件MY_URI.php,其内容为:

 

 

class MY_URI extends CI_URI {
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会将空格转换成+,而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';  
 
分享到:
评论
1 楼 lubojian 2013-09-21  
不行啊怎么回事

相关推荐

    CodeIgniter 完美解决URL含有中文字符串

    总结起来,完美解决CodeIgniter URL含有中文字符串的方案,主要包括以下几点: 1. 扩展CodeIgniter框架,而不是直接修改其代码。 2. 自定义_filter_uri函数以接受非ASCII字符。 3. 适当修改配置项$config['permitted...

    PHP CodeIgniter分页实例及多条件查询解决方案(推荐)

    `page_query_string` 设为TRUE使分页链接包含查询字符串,这样筛选条件在分页时得以保留。`base_url` 配置至关重要,因为它包含了分页链接的基础URL以及筛选条件。 最后,加载分页类并生成分页链接: ```php $this...

    Codeigniter出现错误提示Error with CACHE directory的解决方案

    除了缓存目录的权限问题,这里还提到了其他与CodeIgniter相关的错误解决方案: 1. **"mysql_connect(): No such file or directory"**:这通常意味着MySQL服务未启动或者PHP配置中未正确设置MySQL的连接信息。确保...

    PHP必备工具书:PHP FAQ 由浅入深,解答PHP实际应用可能出现的疑问

    《PHP FAQ》是一本专为PHP开发者准备的实用工具书,它涵盖了PHP编程中的常见问题和解决方案,旨在帮助初学者快速上手,并为有经验的开发者提供便捷的查询参考。这本书的特点是按照由浅入深的逻辑组织内容,使得读者...

    PHP实例开发源码-易优网络科技企业通用网站源码.zip

    这个压缩包中包含的PHP实例开发源码是易优网络科技为构建企业通用网站而设计的一套完整的解决方案。它提供了从前端界面到后端逻辑处理的全面功能,旨在帮助开发者快速搭建高效稳定的企业级网站。 首先,我们来了解...

    PHP实例开发源码—DiY-Page 站群系统.zip

    站群系统是一种能够支持多个独立网站在同一平台上运行的解决方案,它允许管理员通过单一的后台进行统一管理,提高效率并降低维护成本。该压缩包中的内容可能包括以下几个方面: 1. **PHP基础**:PHP(Hypertext ...

    基于PHP的蚂蚁分类信息系统多城市版源码.zip

    【压缩包子文件的文件名称列表】:由于仅给出一个数字字符串"132685048486759829",这可能是由于隐私保护或安全原因,实际的文件名没有提供。在典型的PHP项目中,源码压缩包可能包含以下组件: 1. **index.php** - ...

    dayrui-xunruicms-master.zip

    迅睿CMS免费开源系统是基于PHP7语言采用最新CodeIgniter4作为开发框架生产的网站内容管理框架,提供“电脑网站 + 手机网站 + APP 接口”一体化网站技术解决方案。她拥有强大稳定底层框架,以灵活扩展为主的开发理念...

    php多语企业站【系统】源码

    4. **语言包**:源码中会包含一系列的语言包,每个包对应一种语言,存储网站的所有可翻译字符串。语言包通常为JSON或XML格式,便于维护和扩展。 5. **语言切换功能**:在网站的头部或底部,会有语言切换的选项,供...

    详细介绍了PHP常见面试总结.docx绝对非常有帮助

    - 设计模式是一种通用的解决方案,用于解决软件设计中的常见问题。 - **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **工厂模式**:定义创建对象的接口,但让子类决定实例化哪个类。 - **迭代...

    PHP面试题集锦(包含mysql相关)

    - **ECShop**:电子商务解决方案。 #### 三、提高程序运行效率的方法 **1. 优化SQL语句** - 避免使用`SELECT *`,应明确指定需要查询的字段。 - 尽量减少使用子查询,可以用表连接代替。 - 减少模糊查询的使用。 ...

    php学习:第一次学习php

    对于初学者,首先需要在本地计算机上搭建PHP开发环境,这通常涉及到安装XAMPP或WAMP等集成开发环境,它们包含PHP、Apache服务器和MySQL数据库,为PHP开发提供一站式解决方案。 3. **PHP基本语法** - 注释:`// ...

    Webfitst

    基础语法包括变量($var)、数据类型(字符串、整型、浮点型、布尔型、数组、对象等)、控制结构(if/else、switch、for、while等)、函数和类的使用。 2. **PHP与Web交互**:通过HTTP协议,PHP可以接收来自用户的...

    迅睿CMS免费开源系统-PHP

    迅睿CMS免费开源系统是基于PHP8语言采用最新CodeIgniter4作为开发框架生产的网站内容管理框架,提供“电脑网站 + 手机网站 + APP 接口”一体化网站技术解决方案。她拥有强大稳定底层框架,以灵活扩展为主的开发理念...

    迅睿CMS免费开源系统

    迅睿CMS内容管理框架是基于PHP7语言采用最新CodeIgniter4作为开发框架生产的网站内容管理框架,提供“电脑网站 + 手机网站 + APP 接口”一体化网站技术解决方案。她拥有强大稳定底层框架,以灵活扩展为主的开发理念...

    DytomatePHP:Dytomate 的 PHP 后端

    DytomatePHP 是一个基于PHP构建的后端系统,它的核心目标是提供一个高效、可扩展的解决方案,用于处理Web应用程序的后端逻辑。PHP作为一门广泛应用的服务器端脚本语言,因其易学易用和丰富的库支持而备受开发者喜爱...

Global site tag (gtag.js) - Google Analytics