修复 redirect 中的字符集控制。

浏览:544 发布日期:2014/01/18 分类:技术分享
在使用 redirect 时,会碰到没有设定字符集的情况,导致redirect时出现乱码。比如我的默认字符集是 utf-8.但    $this->redirect('/login@passport.sina.com.cn',array(),3,"正在转入登录页...");你看到的将可能是乱码!

修复方法:
找到 ThinkPHP\common\function.php 加入字符集设置。
第852行开始,修改为如下:function redirect($url, $time=0, $msg='') {
    //多行URL地址支持
    $url        = str_replace(array("\n", "\r"), '', $url);
    if (empty($msg))
        $msg    = "系统将在{$time}秒之后自动跳转到{$url}!";
    if (!headers_sent()) {
        // redirect
        if (0 === $time) {
            header('Location: ' . $url);
        } else {
            header("Content-type: text/html; charset=".C('DEFAULT_CHARSET'));
            header("refresh:{$time};url={$url}");
            echo($msg);
        }
        exit();
    } else {
        $str    = "<meta http-equiv='Content-Type' content='text/html;charset=".C('DEFAULT_CHARSET')."'>";
        $str   .= "<meta http-equiv='Refresh' content='{$time};URL={$url}'>";
        if ($time != 0)
            $str .= $msg;
        exit($str);
    }
}
因为直接修改了框架函数,升级时可能导致此函数被覆盖。请各位看看此 bug 是否真的存在,如果真存在,建议官方修复之。
最佳答案
评论( 相关
后面还有条评论,点击查看>>