【问题标题】:UTF8 Char in CodeigniterCodeigniter 中的 UTF8 字符
【发布时间】:2011-10-31 15:47:16
【问题描述】:

我有问题。我希望你能帮助我。我英语说得不太好,但我会尽量解释清楚。

我来自阿根廷,所以我必须使用“ñ”字符。对于 SEO,我想在某些词的 url 中包含“ñ”,因此,例如,我有:

  • 控制器:webdesign.php
  • 路线:$route['diseñoweb'] = “webdesign”;

但是,当我进入“www.domain.com/diseñoweb”时,它不起作用。我需要网址中的“ñ”字符。 有人知道我该怎么做吗?

谢谢!

【问题讨论】:

    标签: php codeigniter utf-8


    【解决方案1】:

    你可以试试这个

    $route[rawurlencode('diseñoweb')] = “webdesign”;
    

    【讨论】:

      【解决方案2】:

      您想要做的很可能不会按您的意愿工作,因为 URL 不能包含非 ASCII 字符。背景见here

      我认为您需要为 URLencoded 版本创建一个路由,如下所示:

      $route['dise%c3%b1oweb'] = "webdesign";
      

      如果您随后输入的 URL 包含

      diseñoweb
      

      现代浏览器会自动对字符进行 URL 编码。

      【讨论】:

        【解决方案3】:

        首先,你需要在你的配置中允许这个字符,例如你可以有这样的东西……

        $config['permitted_uri_chars'] = 'a-z 0-9_\-ñ'; 
        

        然后,在 system/core/URI.php 的第 231 行,替换

        if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str)) 
        

        if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", utf8_encode($str))) 
        

        【讨论】:

        • 我可以在不破解核心文件的情况下做到这一点吗?
        • 嗯,你可以扩展 URI 类,并替换/覆盖该块的相关功能。但请记住,CI 的 URI 非常严格。默认情况下,CI 不允许任何“异常”字符作为安全原因。所以如果你真的需要这样做,可以选择修改上面的部分。
        • CI 可能会禁止这些字符,因为非 ASCII 字符不能直接使用 - 请参阅此处了解背景信息Unicode characters in URLs
        • 我结合了Pekka和toopay的解决方案。谢谢。
        猜你喜欢
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 2012-01-18
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多