2012-04-06 2 views
0

표준 CakePHP URL 스키마를 사용하는 CakePHP 어플리케이션을 개발 중입니다.CakePHP는 URL에서 "+"를 이스케이프하지 않습니다.

나는 컨트롤러에 다음 함수를 사용하는 경우 :

class IndexController extends AppController { 
    public $uses = false; 
    public function test($a) { 
     var_dump($a); 
    } 
} 

그리고이 URL로 전화 :

string(11) "Hello++Test" 

내가 기대 :

http://server/index/test/Hello+%2BTest 

나는이 결과를 얻을 수 최초의 "+"는 이스케이프 처리를 ""합니다. 왜 이렇게되지 않습니까?

답변

1

"unescape"대신 "unencode"를 의미한다고 생각합니다.

+ 기호가 URL에 유효한 문자이기 때문에 이러한 현상이 발생했을 가능성이 큽니다. URL 인코딩 된 문자 (예 : % xx) 만 '읽기 가능'문자로 다시 변환됩니다. (비록 이것이 아파치가 케이크가 아니라 아파치에 의해 이루어 졌음에도 불구하고)

변환을 원한다면, PHP의 urldecode() 기능을 통해 실행할 수 있습니다. RFC 1738에서

: ".! $ -_ * '() +"

따라서, 단지 알파벳과 숫자, 특수 문자, 그리고 자신의 예약 목적으로 사용 예약 된 문자는 URL 내에서 인코딩되지 않은 사용할 수 있습니다 .

+0

답장을 보내 주셔서 감사합니다. 당신은 + 기호가 URL의 유효한 문자라고 말했기 때문에 공간이 잘못 인코딩 된 클라이언트 측에 오류가있었습니다. (나는'urldecode()'를 사용할 수 없었다. 왜냐하면 두 더하기 기호를 공백으로 디코딩했기 때문이다) – flo

관련 문제