Codeigniter - клиент разместил ссылки с заглавными буквами в URL - PullRequest
0 голосов
/ 02 ноября 2011

мой клиент напечатал ссылки на сайт заглавными буквами.У меня установлена ​​CI, и мне нужно сменить htaccess или базовый контроллер (я сейчас пробую множество опций), чтобы они работали так, как в этих примерах (пользователь вводит это в адресную строку):

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

и так далее ... Кажется, я не могу заставить htaccess просто сказать «принять все, перевести его в нижний регистр, затем обработать»

это вообще возможно ...?

Ответы [ 4 ]

0 голосов
/ 04 ноября 2011

Вы можете расширить базовую библиотеку маршрутизации, чтобы она не чувствительна к регистру. Вот куда бы вы положили свою strtolower() функцию.

Добавление его в обработчик ошибок 404. Плохая идея.

Если вам нужен источник, LMK, но нужно расширить библиотеку, скопировать 1 функцию и добавить strtolower().

0 голосов
/ 02 ноября 2011

Вы можете использовать .htaccess, чтобы переписать деталь после имени хоста (в любом случае она не чувствительна к регистру):

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

0 голосов
/ 02 ноября 2011

Расширьте базовый класс CI_Exceptions с помощью собственной функции 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 (или pre_controller) ловушки , хотя я бы лично сделал это, только если ловушки уже включены для другой цели.

0 голосов
/ 02 ноября 2011

Да, вы можете преобразовать ввод в маленькие буквы, как только текст будет введен.Вы можете сделать это с помощью JavaScript.см. приведенный ниже фрагмент кода.

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

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

ИЛИ вы можете использовать функцию strtolower () в PHP для преобразования данных в нижний регистр и их обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...