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制作简单的内容采集器的代码
Nov 28 PHP
PHP SQLite类
May 07 PHP
php实现分页工具类分享
Jan 09 PHP
php自定义session示例分享
Apr 22 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
PHP实现上一篇下一篇的方法实例总结
Sep 22 PHP
使用PHPMailer发送邮件实例
Feb 15 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
Laravel框架表单验证操作实例分析
Sep 30 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 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可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
Chrome Web App开发小结
2014/09/04 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
flask-restful使用总结
2018/12/04 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
eBay奥地利站:eBay.at
2019/07/24 全球购物
中学生个人自我评价
2014/02/06 职场文书
商场父亲节活动方案
2014/08/27 职场文书