문제

인코딩 된 문자열을 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";

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top