CodeIgniter 如何解决URL含有中文字符串

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服务器是有关系的呢,希望大家能够帮忙解答。

原文地址:http://www.manongjc.com/article/808.html

codeIgniter相关阅读:

时间: 2024-12-31 03:46:09

CodeIgniter 如何解决URL含有中文字符串的相关文章

解决URL带中文参数乱码问题

通过配置Tomcat来解决URL代中文参数乱码的问题. 首先打开Tomcat安装目录 打开conf文件夹 打开server.xml,在大约65行的位置,加一个属性 URIEncoding="UTF-8" 这样就支持Url中文参数了.

SQL Server 插入含有中文字符串出现乱码现象的解决办法

ELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')       --查询SQLServer编码格式的语句 下面是查询结果对照: 936 简体中文GBK 950 繁体中文BIG5 437 美国/加拿大英语 932 日文 949 韩文 866 俄文 65001 unicode UFT-8 插入一条带中文字符串的数据, 我们可以通过修改数据库的Collation 来修改数据库的编码方式: 点击确定就可以啦! 我们

java.net.Decoder 配合java.net.Encoder使用解决url参数中文乱码问题【2014-11-17】

1.解码规则 //解释一下:解码规则对应着编码规则,类似对称加密算法 //解码规则:1.数字和字母保持原样: 2."."."-"."_"."*"保持原样:"+"号解码为" "(空一格字符串): 3.%xy根据解码编码进行解码: 2.解码方法 //解释一下:解码方法和编码方法差不多 //2个方法:decode(String s)和decode(String s,String enc) //

获得URL含有中文出现乱码解决

如: http://www.htmlx.culub/?searchWord=工商代理 当获取链接中所对应searchWord的值时,出现 '%E5%B7%A5%E5%95%86%E4%BB%A3%E7%90%86'; 正确应该为:工商代理 利用函数 decodeURIComponent() 可以解决这问题,即: decodeURIComponent(这里放传进来的值) ; 反之则用:encodeURIComponent()

关于URL编码(针对URL含有中文的参数)

http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址"http://www.abc.com",但是没有希腊字母的网址"http://www.aβγ.com"(读作阿尔法-贝塔-伽玛.com).这是因为网络标准RFC 1738做了硬性规定:

python读取文件夹及其子文件夹下所有含有中文字符串的lua文件

#!/usr/bin/python #coding=utf-8 import sys import os import shutil import struct import hashlib import re G_WORK_PATH = "E:\phoneclient" G_TARGET_PATH = [  #lua:  ["%s/sdz/script",     "(.*\.lua)",], ] G_OUTPUT_LIST = [] #跳转至

利用jQuery 解决URL请求参数有中文时出现乱码的问题

利用jQuery 解决URL请求参数有中文时出现乱码的问题 在开发的时候经常会碰到URL中请求参数含有中文的情况,这时如果在前台不作处理,直接在后台利用request.getParameter()拿对应的参数值就会出现中文乱码. 这时可以先利用jQuery对对应中文进行encodeURI(),例子如下: 前台对应代码 <!--省畋无关代码--> <input type="button" id="submitA" value="重发短信&q

解决Java工程路径中含有中文的情况

问题: 当Java工程路径中含有中文时,得不到正确的路径 *** 解决: 这其实是编码转换的问题.当我们使用ClassLoader的getResource方法获取路径时,获取到的路径被URLEncoder.encode(path,"utf-8")编码了,当路径中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要的真实路径,所以我们可以调用URLDecoder.decode()方法进行解码,以便得到原始的中文及空格路径. Java代码 : String package

Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决

Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决 1. #原因解析 1 2. #解决方式 2 3. 输出图片流... 2 4. --code 2 5. 参考 3 1. #原因解析 查看累挂发送d url,,,俄使用的是ff..它把url转换成个 http://localhost/img/QQ%E6%88%AA%E5%9B%BE20140401175433.jpg 发送出去..每汉字3个%字符,