웹 양식을 통해 텍스트를 수집하고 Perl CGI에서 수집 할 때 "+"의 모든 인스턴스가 ""로 변환됩니다. 제출하기 전에 자바 스크립트 이스케이프를 통해 텍스트를 실행하지만 이스케이프는 변경되지 않은 상태로 유지됩니다.AJAX 요청을 처리하는 CGI 프로그램에서 "+"문자가 공백으로 바뀌는 이유는 무엇입니까?
정말 실종 된 것이 분명해야합니다 ... "2 2 = 4"문자열을 보내고 "2 2 = 4"로 도착하지 않으려면 어떻게해야합니까?
웹 양식을 통해 텍스트를 수집하고 Perl CGI에서 수집 할 때 "+"의 모든 인스턴스가 ""로 변환됩니다. 제출하기 전에 자바 스크립트 이스케이프를 통해 텍스트를 실행하지만 이스케이프는 변경되지 않은 상태로 유지됩니다.AJAX 요청을 처리하는 CGI 프로그램에서 "+"문자가 공백으로 바뀌는 이유는 무엇입니까?
정말 실종 된 것이 분명해야합니다 ... "2 2 = 4"문자열을 보내고 "2 2 = 4"로 도착하지 않으려면 어떻게해야합니까?
비 ASCII 문자의 경우 이스케이프 및 언 이스케이프 기능이 제대로 작동하지 않으며 더 이상 사용되지 않습니다. JavaScript 1.5 이상에서는 encodeURI, decodeURI, encodeURIComponent 및 decodeURIComponent를 사용합니다. -
에서 볼 수 있듯이 당신은 %2B
로 +
을 인코딩 할 수 encodeURIComponent
와 escape
교체 : http://www.google.com/search?q=2+%2B+2
당신 '+
', 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"
참고 +
는 인코딩되지 않습니다.
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
네이티브. 그러나 위의 두 답변은 트릭을 수행합니다. –
어, AJAX 양식 제출은 일반 양식 제출과 다를 바 없습니다. – jrockway
@Dr. 그것은 당신의 보트를 흔들어 놓는 것이 무엇이든지간에 전혀 말이되지 않습니다. –