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


Posted in PHP onMay 13, 2016

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,其内容为:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
 
class MY_URI extends CI_URI { 
 
 /** 
  * 自定义的url过滤函数 
  * 
  * @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会将空格转换成+,而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服务器是有关系的呢,希望大家能够帮忙解答。

以上这篇CodeIgniter 完美解决URL含有中文字符串就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
坏狼的PHP学习教程之第1天
Jun 15 PHP
PHP中uploaded_files函数使用方法详解
Mar 09 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
php的hash算法介绍
Feb 13 PHP
PHP中余数、取余的妙用
Jun 29 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
php pdo操作数据库示例
Mar 10 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
Laravel学习教程之路由模块
Aug 18 PHP
详解json在php中的应用
Sep 30 PHP
PHP之header函数详解
Mar 02 PHP
php htmlentities()函数的定义和用法
May 13 #PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 #PHP
php调用自己java程序的方法详解
May 13 #PHP
Linux php 中文乱码的快速解决方法
May 13 #PHP
PHP 返回13位时间戳的实现代码
May 13 #PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 #PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 #PHP
You might like
php创建sprite
2014/02/11 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
php中smarty变量修饰用法实例分析
2015/06/11 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
node.js中watch机制详解
2014/11/17 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
express启用https使用小记
2019/05/21 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
PyQt5每天必学之组合框
2018/04/20 Python
Python requests模块实例用法
2019/02/11 Python
Django实现学员管理系统
2019/02/26 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
PHP遍历数组的6种方式总结
2021/11/17 PHP