Codeigniter URI의 비율 기호
-
06-07-2019 - |
문제
인코딩 된 문자열을 Codeigniter 컨트롤러로 전달해야합니다.
예시:
DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/
내 문제는 허용되지 않은 캐릭터 인 비율입니다. 다음과 함께 구성 파일을 변경하려고했습니다.
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%';
그만큼 +
괜찮지 만 %
유효하지 않습니다. 이 Reg Exp를 변경하도록 도와 줄 수 있습니까? %
상징? 미리 감사드립니다!
해결책
"-"문자열의 끝에서 그렇지 않으면 범위로 해석됩니다. %는 이미 볼 수 있듯이 허용 된 문자 목록에 있습니다.
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-';
ahem ... 샘플 문자열을 다시 본 후. 다음은 당신이 얻는 이유입니다. "The URI you submitted has disallowed characters
".
짧은 설명: 앰퍼 샌드를 추가하십시오 & 허용 된 문자 목록에
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+&-';
긴 설명
함께 연주하는 두 가지가 있습니다.
ㅏ) Codeigniter는 모든 URI를 확인합니다 세그먼트 허용되지 않은 캐릭터를 위해. 이것은 허용 된 캐릭터를 화이트리스트로 사용하여 발생합니다. 허용되는 것은 체크인 할 수 있습니다.시스템/응용 프로그램/config/config.php 에서 $config['permitted_uri_chars']
변하기 쉬운. 기본값은 같은 것으로 설정됩니다 'a-z 0-9~%.:_-'
. 따라서 A에서 Z까지의 모든 글자, 공간, 모든 숫자 및 다음 문자 *~%. : _-가 허용됩니다.
좋아, 당신이 말하는 샘플 URI와 비교해 봅시다.
a-z 0-9~%.:_-
DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/ //note the missing %
모든 캐릭터는 괜찮습니다 ...하지만 플러스 기호는 어떻습니까? +? 허용 문자 목록에 없습니다! 그러나 URI는 불평하지 않습니까? 이것이 당신의 문제의 열쇠입니다.
비) Codeigniter urldecodes URI는 Whitelist-Character-Check 이전의 URI 세그먼트를 통해 URI를 간단히 URLONCOD로하여 누군가가 수표를 우회하지 못하게합니다. 그래서 + 공간으로 디코딩됩니다. 이 행동은 때문입니다 urlencode (공백을 인코딩합니다 + 서명,에서 벗어나 RFC 1738). 그것은 왜 그런지 설명합니다 + 표시가 허용됩니다.
이 두 가지가 결합 된 이유는 왜이 특정 URI가 작동하지 않는지 설명합니다.
urldecode(DO_SOMETHING/Coldplay/Fix+You/273/X+%26+Y/) //evaluates to
//DO_SOMETHING/Coldplay/Fix You/273/X & Y/
whops ... urldecoding이 번역됩니다 %26 an &
허용 된 캐릭터가 아닙니다. Mistery ;-) 해결
다른 팁
이것을 시도하십시오 : $ config [ 'uri_protocol'] = "path_info";