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之第五天
Oct 09 PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
php读取本地文件常用函数(fopen与file_get_contents)
Sep 09 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
windows系统php环境安装swoole具体步骤
Mar 04 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
星际玩家的三大定律
2020/03/04 星际争霸
一个简单实现多条件查询的例子
2006/10/09 PHP
用php+mysql一个名片库程序
2006/10/09 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHP编写简单的App接口
2016/08/28 PHP
php封装的smarty类完整实例
2016/10/19 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
Python修改MP3文件的方法
2015/06/15 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
制药工程专业毕业生推荐信
2013/12/24 职场文书
《争吵》教学反思
2014/02/15 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
保护环境倡议书300字
2014/05/19 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers