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 MYSQL中插入当前时间
Apr 06 PHP
快速开发一个PHP扩展图文教程
Dec 12 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
解析php curl_setopt 函数的相关应用及介绍
Jun 17 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
php学习笔记之字符串常见操作总结
Jul 16 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
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
js中的this关键字详解
2013/09/25 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
JS前端笔试题分析
2016/12/19 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
详解Vue方法与事件
2017/03/09 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
Python语言的面相对象编程方式初步学习
2016/03/12 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
财务管理职业生涯规划范文
2013/12/27 职场文书
建议书标准格式
2014/03/12 职场文书
大学生社团活动总结
2014/04/26 职场文书
小班下学期评语
2014/05/04 职场文书
总经理任命书范本
2014/06/05 职场文书
我爱我班主题班会
2015/08/13 职场文书
导游词之唐山景点
2019/12/18 职场文书