Intereting Posts
MySQLdump пустой файл с использованием PHP, но не командной строки? Как разбирать чрезвычайно большой XML-файл в java или php и вставлять в DB mysql как я могу открыть файл в zip-файле, не извлекая его из PHP Подстановочный IP-запрет с использованием MySQL PHP – Работа с файлами cookie Определение типа файла с помощью PHP. Что такое Magic Database? Как создать новую страницу на сайте magento Лучший способ реализовать динамические меню / заголовки / нижний колонтитул с помощью codeignitor Определите часовой пояс из широты / долготы без использования веб-сервисов, таких как Geonames.org PHP заменяет все символы звездочкой Назначить переменную в условии, если true Почему состояние флажка не всегда передается скрипту PHP? Аутентификация веб-браузера с сертификатом SSL Symfony2: нет расширения, которое может загрузить конфигурацию для php добавление изображений в другое изображение, точное позиционирование

Процент символа в URI CodeIgniter

Мне нужно передать закодированную строку в контроллер CodeIgniter.

Пример :

DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/ 

Моя проблема – это символ процента, который является запрещенным символом. Я попытался изменить файл конфигурации следующим образом:

 $config['permitted_uri_chars'] = 'az 0-9~%.:_\-\+\%'; 

+ Нормально, но % недействительно. Можете ли вы помочь мне изменить этот reg exp, чтобы он дал символ % ? Заранее спасибо!

Поместите символ « » в конец строки, иначе он будет интерпретироваться как диапазон. % Уже находится в списке разрешенных символов, как вы можете видеть.

 $config['permitted_uri_chars'] = 'az 0-9~%.:_+-'; 

Гм … снова посмотрим на вашу примерную строку. Вот почему вы получаете « The URI you submitted has disallowed characters ».

Краткое объяснение : добавьте амперсанд и список разрешенных символов

 $config['permitted_uri_chars'] = 'az 0-9~%.:_+&-'; 

Длительное объяснение

Есть две вещи, играющие вместе.

A) CodeIgniter проверяет все сегменты URI для запрещенных символов. Это происходит с помощью разрешенных символов. Какие из них разрешены, можно проверить в / system / application / config / config.php в переменной $config['permitted_uri_chars'] . Значение по умолчанию установлено на 'az 0-9~%.:_-' . Таким образом, все буквы от a до z, пробел, все числа и следующие символы * ~%.: _- разрешены.

Хорошо, сравним это с вашим образцом URI, который, как вы говорите, работает

 az 0-9~%.:_- DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/ //note the missing % 

Все символы в порядке … но подождите, что будет с плюсом + ? Это не список разрешенных персонажей! И все же URI не жалуется? Это ключ к вашей проблеме.

B) CodeIgniter urldecodes сегменты URI до проверки белого символа, чтобы предотвратить, что кто-то обходит проверку, просто urlencoding URI. Таким образом, символ + становится декодированным в пространстве. Это происходит из-за urlencode (который кодирует пробелы как знак + , отклоняясь от RFC 1738 ). Это объясняет, почему знак + разрешен.

Эти две вещи вместе объясняют, почему этот конкретный URI не работает.

 urldecode(DO_SOMETHING/Coldplay/Fix+You/273/X+%26+Y/) //evaluates to //DO_SOMETHING/Coldplay/Fix You/273/X & Y/ 

Упс … urldecoding переводит % 26 в &

Это не разрешенный характер. Мистерий 😉 решил

попробуйте следующее: $ config ['uri_protocol'] = "PATH_INFO";