【问题标题】:codeigniter doesn't redirect to utf-8 urlcodeigniter 不会重定向到 utf-8 url
【发布时间】:2015-11-08 13:53:57
【问题描述】:

我正在尝试使用 Codeigniter 3.0 在我的网站上实现搜索表单,但 redirect() 方法存在一些问题。

我想要做的是,当我输入一些字符串并按回车键时,它会向控制器发出 post 请求,然后控制器将获取字符串并将当前 url 重定向到 http://example.com/search/string

所以,这是我拥有的代码:

搜索表格:

<form action="/search" method="post" accept-charset="UTF-8">

获取搜索字符串并进行重定向的控制器:

public function do_search() {
    $search = $this->input->post('search');

    log_message('debug', 'search: ' . $search);

    if ($search) {
       redirect('search/' . $search, 'refresh');
    } else {
       redirect('/', 'refresh');
    }
}

config.php:

$config['permitted_uri_chars'] = 'üÜöÖğĞıİəƏçÇşŞ a-z 0-9~%.:_\-';

另外,我的基本控制器上有以下代码:MY_Controller

$this->output->set_header('Content-Type: text/html; charset=utf-8');

现在,当我在搜索表单上输入 "həə" 时,它会重定向,但 url 会变成 "hÉÉ"。如您所见,我正在控制器上记录搜索字符串,该字符串打印正确。 (如 "həə")。

我错过了什么吗?任何想法如何解决这个问题?

【问题讨论】:

    标签: php codeigniter url redirect utf-8


    【解决方案1】:

    不支持ascii是软件中的普遍问题,在浏览器相关软件中是非常特殊的问题。您应该做的是,获取传入的值并具有某种逻辑并进行重新映射。 Codeigniter 有一个内置的 remap 函数。

    调用者:

    function _remap($method)
        {
          // here your logic
    
        }
    

    您可以在每个控制器中使用此功能。

    一个小提示:如果您支持多语言,那么您应该在每个请求中传输您的 GET 或 POST 或 Cookie 中的语言,并具有某种逻辑。否则你会遇到麻烦。

    【讨论】:

      【解决方案2】:

      我编写了一个小的 jQuery 代码来进行重定向,它在我的情况下确实有效。

      $("form[name=search]").submit(function (e) {
        e.preventDefault();
        window.location = "/search/" + $("input[name=search]").val();
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-16
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 2015-09-14
        相关资源
        最近更新 更多