Почему мои символы "+" превратились в пробелы в моей CGI-программе, которая обрабатывает запросы Ajax? - PullRequest
1 голос
/ 18 марта 2010

Я собираю текст через веб-форму и замечаю, что когда он собирается моим Perl CGI, все экземпляры "+" преобразуются в "". Я пропускаю текст через escape-код JavaScript перед отправкой, но escape, похоже, оставляет + без изменений.

Должно быть что-то действительно очевидное, что я упускаю ... как мне послать строку "2 + 2 = 4" до конца, чтобы она не пришла как "2 2 = 4"?

Ответы [ 4 ]

4 голосов
/ 18 марта 2010

Функции escape и unescape не работают должным образом для символов, не относящихся к ASCII, и устарели. В JavaScript 1.5 и более поздних версиях используйте encodeURI, decodeURI, encodeURIComponent и decodeURIComponent.

- https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions

Заменить escape на encodeURIComponent

3 голосов
/ 18 марта 2010

Вы '+' в URL должны быть закодированы как %2B:

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

Даст = 1006 *


В Javascript это означает использование функции encodeURIComponent: эта часть кода:

encodeURIComponent('2 + 2 = 4')

даст:

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

Обратите внимание, что кодируется +.


Пока этот:

escape('2 + 2 = 4')

даст только:

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

Обратите внимание, что + не закодировано.

1 голос
/ 18 марта 2010

Я не знаю, что вы имеете в виду, используя JavaScript escape. Браузеры будут правильно кодировать значения полей формы, а 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
}

Выходные данные, которые я получаю при отправке этой формы с 2+2=4 в поле ввода:

2+2=4
1 голос
/ 18 марта 2010

Вы можете закодировать + как %2B, как показано в: http://www.google.com/search?q=2+%2B+2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...