2010-03-18 3 views
1

웹 양식을 통해 텍스트를 수집하고 Perl CGI에서 수집 할 때 "+"의 모든 인스턴스가 ""로 변환됩니다. 제출하기 전에 자바 스크립트 이스케이프를 통해 텍스트를 실행하지만 이스케이프는 변경되지 않은 상태로 유지됩니다.AJAX 요청을 처리하는 CGI 프로그램에서 "+"문자가 공백으로 바뀌는 이유는 무엇입니까?

정말 실종 된 것이 분명해야합니다 ... "2 2 = 4"문자열을 보내고 "2 2 = 4"로 도착하지 않으려면 어떻게해야합니까?

답변

3

당신 '+', URL에, %2B로 인코딩해야 :

http://www.example.com/myscript.ext?a=2%20%2B%202%20=%204 
,451,515,

를 제공 = 자바 스크립트 2 + 2 = 4


, 이는 encodeURIComponent 함수를 사용하여 의미

encodeURIComponent('2 + 2 = 4') 

줄 것이다 :이 코드 부분

"2%20%2B%202%20%3D%204" 

참고 + 인을 인코딩 됨.


일이 있지만 :

escape('2 + 2 = 4') 

만 줄 것이다 :

"2%20+%202%20%3D%204" 

참고 +는 인코딩되지 않습니다.

1

JavaScript 이스케이프를 사용하여 무슨 뜻인지 몰라요. 브라우저는 양식 필드 값을 올바르게 인코딩하고 CGI.pm은 올바르게 디코딩합니다. 예를 들어

,

#!/usr/bin/perl 

use strict; use warnings; 
use CGI; 

my $cgi = CGI->new; 

if ($cgi->param) { 
    process_form($cgi); 
} 
else { 
    show_form($cgi); 
} 

sub process_form { 
    my ($cgi) = @_; 

    print $cgi->header('text/plain'), 
      $cgi->param('entry'), "\n"; 
} 
sub show_form { 
    my ($cgi) = @_; 

    print $cgi->header, <<EO_HTML; 
<!DOCTYPE HTML> 
<html><head><title>Test +</title></head> 
<body><form> 
<input name="entry"><input type="submit"> 
</form></body></html> 
EO_HTML 
} 

I는 입력 필드에 2+2=4으로이 양식을 제출에서 얻을 출력은 다음과 같습니다 양식의 값을 제출 한 적도 없구요 그래서 내가 아약스를 사용하고

2+2=4
+0

네이티브. 그러나 위의 두 답변은 트릭을 수행합니다. –

+0

어, AJAX 양식 제출은 일반 양식 제출과 다를 바 없습니다. – jrockway

+0

@Dr. 그것은 당신의 보트를 흔들어 놓는 것이 무엇이든지간에 전혀 말이되지 않습니다. –

관련 문제