Codeigniter - 客户在URL中发布带大写字母的链接

时间:2011-11-02 12:24:29

标签: .htaccess codeigniter lowercase

我的客户以大写字母打印了指向该网站的链接。 我有CI安装,需要更改htaccess或基本控制器(我在mo尝试了很多选项)才能像这些示例一样工作(用户将其输入到地址栏中):

http://www.site.com/HAPPY/chappy - > http://www.site.com/happy/chappy

http://www.SITE.com/HaPpy/CHAPpy - > http://www.site.com/happy/chappy

http://WWW.Site.CoM/happy/chappY - > http://www.site.com/happy/chappy

依旧...... 我似乎无法简单地说'把所有东西都拿进来,把它变成小写然后处理它'

这甚至可能......?

4 个答案:

答案 0 :(得分:0)

是的,您可以在输入文本后立即将输入转换为小写字母。你可以用javascript做到这一点。请参考下面的代码snipe。

function makeLowercase() {
document.form1.outstring.value = document.form1.instring.value.toLowerCase();
}

<input name="outstring" type="text" value="" size="30" onkeyup="makeLowercase();" onblur="makeLowercase();">

或者您可以在PHP中使用 strtolower()函数将数据转换为小写并处理它。

答案 1 :(得分:0)

您可以使用.htaccess重写主机名后的部分(无论如何都不区分大小写):

http://www.chrisabernethy.com/force-lower-case-urls-with-mod_rewrite/

答案 2 :(得分:0)

Extend the CI_Exceptions core class使用您自己的show_error功能。使用show_error的原始代码,但在这些行中添加一个快速检查:

class MY_Exceptions extends CI_Exceptions {

    /**
     * General Error Page
     *
     * This function takes an error message as input
     * (either as a string or an array) and displays
     * it using the specified template.
     *
     * @access  private
     * @param   string  the heading
     * @param   string  the message
     * @param   string  the template name
     * @return  string
     */
    function show_error($heading, $message, $template = 'error_general', $status_code = 500)
    {
        // First try forwarding to all-lowercase URL if there were caps in the request
        if ($_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']))
        {
            header('Location: ' . strtolower($_SERVER['REQUEST_URI']));
            return;
        }
        /* Rest of original function to follow... */

根据需要自定义,记住您可能希望使用大写的URI的其他部分。

您也可以使用pre_system (or pre_controller) hook实现类似功能,但我个人只会在已经为其他目的启用挂钩时才这样做。

答案 3 :(得分:0)

您可以将核心路由库扩展为不区分大小写。这就是你放置strtolower()功能的地方。

将它添加到404错误处理程序是个坏主意。

如果你想要源LMK,但它应该是扩展库,复制1个函数,并添加strtolower()