codeIgniter默认的配置下是不允许URL中包含非ASCII字符的,如果我们有这样一个字符串:

http://www.example.com/photo/ 北京/鸟巢.jpg
那么CI会毫不客气的告诉你:
The URI you submitted has disallowed characters.

你 可能会说,那我把这个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/libraries/下增加一个文件MY_URI.php,其内容为:

class MY_URI extends CI_URI {
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';  

CodeIgniter中URL含有中文字符串的解决方案相关推荐

  1. split逗号分割中文出现乱码java_Java中URL传中文时乱码的问题解决方案

    前言 Java中URL传中文时乱码的问题相信不少朋友都遇到过,最近就遇到一个问题,就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.g ...

  2. Swift URL含有中文的处理

    iOS URL含有中文处理 [Swift版本] 在此之前,建议了解"全面深度解析iOS端URL编码和解码过程", 会对URL有一个详细的认识. 一.编码 在使用网络请求的时候我们常 ...

  3. 取某个字段的前几位 php,php中的一个中文字符串截取函数

    php中的一个中文字符串截取函数 PHP代码: ---------------------------------------------------------------------------- ...

  4. 关于JAVA中URL传递中文参数,取值是乱码的解决办法

    今天遇到一个问题就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.getParameter取出是出现乱码的问题. 现解决办法如下: 1 ...

  5. java url传参中文乱码问题_java中url传中文参数出现乱码

    缘由:java Http请求传输时将url以ISO-8859-1编码,服务器收到字节流后默认会以ISO-8859-1编码来解码成字符流(形成中文乱码).服务器 方法一:编码 咱们须要把request. ...

  6. 检测含有中文字符串的实际长度

    检测含有中文字符串的实际长度 发表时间:2002-9-28 作者:追风 在ASP技术里我整理了一篇检测含有中文字符串的实际长度的文章.同样在ASP.NET里也很容易得到它的长度. 解决办法如下,str ...

  7. Java中url传递中文参数取值乱码的解决方法

    Java中url传递中文参数取值乱码的解决方法 参考文章: (1)Java中url传递中文参数取值乱码的解决方法 (2)https://www.cnblogs.com/liwenjuan/p/3211 ...

  8. php怎么截取中文第一个字符串,php中怎么截取中文字符串

    php中如何截取中文字符串? 众所周知php原生函数substr是不支持截取中文字符串的.下面的代码提供了多种截取php中文字符串的方法. 1. 截取GB2312中文字符串 0xa0) { $tmps ...

  9. qt中生成含有中文的json文件和解析json文件

    提要 生成的json文件在程序加载解析时出现上述错误,究其原因是生成json文件过程中编码问题.qt编译器默认的编码格式为utf-8,而windows一般为gbk编码,所以就需要在生成本地json文件 ...

最新文章

  1. 小程序 reduce_使用reduce制作的10个更多实用程序功能
  2. 目标检测开源代码汇总 object detection algorithm codes
  3. 500只产品汪周末齐聚宇宙中心五道口,这里发生了什么?
  4. [VSTO系列]三、简单的UI设计/QQ联系人导出(下)
  5. ​ArduinoYun教程之ArduinoYun硬件介绍
  6. jsp页面页面post传值_几种JSP页面传值方式
  7. Java单机部署,Nacos docker单机模式部署实现过程详解
  8. PyTorc 1.0 中文文档:扩展PyTorch
  9. Nginx负载均衡与反向代理——基础功能
  10. c++用tinyxml2读xml文件,转化为字节码,解析并保存
  11. 新手到黑客的最全入门路径图(附全部学习资料下载)!
  12. 图片格式与设计那点事儿
  13. MathType怎么编辑商标标志
  14. 支付宝密钥及文件生成方式
  15. 液晶显示器 选购攻略
  16. 贝格尔编排法的PHP实现
  17. OSPF的DR和BDR
  18. 一般信道容量的计算matlab,DMC信道容量迭代计算的matlab实现
  19. css flex 文字右对齐,css flex align-items属性 交叉轴上对齐方式垂直对齐方式
  20. UML 类图 StarUML---推荐一款UML工具 很好很强大

热门文章

  1. 未能连接到许可证服务器 发生错误 -96,ug启动许可证错误怎么办 UG软件启动许可证错误96解决方法...
  2. python爬虫程序的流程图_Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)...
  3. linux内核那些事之VMA常用操作
  4. 【pytorch】torch.linspace==>返回一个一维的tensor(张量),这个张量包含了从start到end,分成steps个线段得到的向量
  5. 交叉熵损失函数原理详解,KL散度
  6. for _ in range(10)中 _ 的作用
  7. Kafka单节点单broker的部署和使用
  8. phpcms顶部导航代码、高亮显示设置
  9. 三菱plc指令大全详解图表_三菱PLC的常见问题大全!
  10. PHP简洁美观轻量级秀恩爱网站源码