если я пытаюсь получить доступ к этому URL- адресу http: //localhost/common/news/33/+%E0%B0%95%E0%B1%87%E0%B0%B8.html , он показывает, что ошибка была обнаружена, Представленный вами URI имеет запрещенные символы. Я установил $ config ['allowed_uri_chars'] = 'az 0-9 ~%.: ?? _ = + -?' ; ..// Что я делаю ?
Да, если вы хотите разрешить байты без ASCII, вам придется добавить их в permitted_uri_chars
. Эта функция работает с URL-декодированными строками (обычно, если в среде нет чего-то необычного), поэтому вам нужно указать дословные байты в строке, а не только %
и шестнадцатеричные цифры. (Да, я сказал байты: _filter_uri
не использует регулярное выражение Unicode, поэтому вы не можете использовать диапазон Unicode.)
Попытка фильтровать входящие значения (вместо кодирования исходящих) – это смехотворная основная ошибка, которая удручает найти в популярной структуре. Вы можете отключить эту ошибочную функцию, установив permitted_uri_chars
в пустую строку, или, может быть, вам понадобится диапазон всех байтов, кроме управляющих кодов ( "\x20-\xFF"
). К сожалению, функция _filter_uri
прежнему делает сумасшедшие, сумасшедшие, сломанные вещи с некоторым входом, HTML-кодирование некоторой пунктуации на пути к какой-то неизвестной причудливой причине. И вы не можете отключить это.
Это, наряду со сломанным «анти-XSS» mangler, заставляет меня поверить, что команда CodeIgniter имеет довольно плохое представление о том, как проблемы с экранированием строк и проблемы безопасности действительно работают. Я бы не стал верить в то, что они говорят о безопасности.
Что делать? Прекратите использование символов Юникода в URL-адресе – по тем же причинам, что и имена файлов в файловой системе с символами Unicode.
Но, если вам это действительно нужно, я скопирую / вставлю некоторые строки из конфига:
Leave blank to allow all characters -- but only if you are insane.
Я бы не предложил попробовать их декодировать или использовать любые другие трюки, вместо этого я бы предложил использовать функции urlencode () и urldecode () .
Поскольку у меня нет копии вашего кода, я не могу добавить примеры, если вы могли бы предоставить мне некоторые, я могу показать вам пример, как это сделать.
Тем не менее, это довольно просто использовать, и он построен на PHP4 и PHP5.
У меня была аналогичная проблема, и я хотел поделиться этим решением. Это был пароль сброса, и мне пришлось отправить имя пользователя и время, так как URL будет активен только час. Codeigniter не принимает определенных символов в URL-адресе по соображениям безопасности, и я не хотел его изменять. Итак, вот что я сделал:
Я знаю, что его почти год до того, как этот вопрос был задан, но я надеюсь, что кто-то найдет это решение полезным после приезда сюда Google.