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+SqlServer实现分页显示
Oct 09 PHP
给初学PHP的5个入手程序
Nov 23 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
详解PHP数组赋值方法
Nov 07 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
非常经典的PHP文件上传类分享
May 15 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
PHP大文件及断点续传下载实现代码
Aug 18 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边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
php实现搜索类封装示例
2016/03/31 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
js post提交调用方法
2014/02/12 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
layui文件上传实现代码
2017/05/20 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
详解Python中的type()方法的使用
2015/05/21 Python
Python开发的实用计算器完整实例
2017/05/10 Python
django中瀑布流写法实例代码
2019/10/14 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
Linux的文件类型
2012/03/07 面试题
在校生自我鉴定
2014/01/23 职场文书
会计电算化学生个人的自我评价
2014/02/08 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
Python实现简繁体转换
2021/06/07 Python