Codeigniter «ловит» URL-символы, даже если они были закодированы - PullRequest
3 голосов
/ 18 октября 2010

У меня самая странная проблема с codeigniter. У меня есть сайт, который имеет функцию поиска, которая отображает запрос человека в URL, чтобы они могли сохранить URL. Я проверяю, что текст запроса прошел через rawurlencode, прежде чем вставить его в URL. Тем не менее, Codeigniter по-прежнему выводит меня на страницу ошибки, когда в запросе есть символ, которого нет в моей конфигурации allow_uri_characters.

Поэтому, хотя мой браузер говорит / search-results / query /% 22samplequery% 22, я все еще получаю сообщение об ошибке при использовании недопустимых символов.

Это ошибка? В моем URL нет недопустимых символов. У меня есть знак% и некоторые цифры (которые все специально разрешены). Это определенно параметр allow_uri_characters, который приносит мне горе. Если я добавлю кавычку, он разрешит% 22 без проблем.

И чтобы быть ясным, запрос приходит из формы как данные поста, затем кодируется в моем контроллере и затем перенаправляется на новую страницу. Нельзя каким-либо образом применять allow_uri_characters ДО того, как он будет закодирован.

Это сводит меня с ума, так как мое единственное решение на данный момент - открыть мои allow_uri_charcters всему под солнцем, что не очень безопасно!

Ответы [ 3 ]

1 голос
/ 22 мая 2012

Похоже, вам нужно добавить @ к разрешённому_члену, даже если вы urlencode письма перед отправкой в ​​site_url (). Может быть, кодировать его перед просмотром символов ... Символ процента в CodeIgniter URI

Вот пост, более конкретный для вашей проблемы. http://sholsinger.com/archive/2009/04/passing-email-addresses-in-urls-with-codeigniter/

Я попытался с помощью allow_uri_chars и, в конце концов, передал сообщение электронной почты в виде строки запроса (?email=bla@bla.com), даже не кодировав его в кодировке. Прекрасно работает:)

0 голосов
/ 23 февраля 2011

У меня есть собственное решение для этого, оно грязное и не оптимальное, но оно работает.Вы можете создать таблицу для хранения (search_string, url_title).

Каждый раз, когда вы выполняете поиск, сохраняйте строку, генерируйте url_title () и сохраняйте ее в базе данных.Таким образом, вы можете перенаправить своего пользователя на безопасный URL-адрес, не пропуская начальный поиск.

Я знаю, что кто-то будет кричать на меня за это решение.Но если ваш сайт небольшой, а трафик остается низким, это верное решение.

0 голосов
/ 18 октября 2010

Может ли это быть URL, кодирующий% 20 в "перед проверкой codeigniter"? Как насчет добавления этого в список разрешенных символов.

...