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 相关文章推荐
56.com视频采集接口程序(PHP)
Sep 22 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
php 文件上传类代码
Aug 06 PHP
PHP文件操作实现代码分享
Sep 01 PHP
php class类的用法详细总结
Oct 17 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
PHP http请求超时问题解决方案
Nov 13 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
浅谈PHP语法(1)
2006/10/09 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
旅游管理毕业生自荐书
2014/02/02 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
教师求职信怎么写
2015/03/20 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
Python echarts实现数据可视化实例详解
2022/03/03 Python
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技