2016-08-08 9 views
1

Ich bin überhaupt nicht vertraut mit Perl, aber habe etwas Verständnis von HTML. Ich versuche gerade, Code von einem on-line-Programm zu konfigurieren, das Text verarbeitet, der vom Benutzer eingegeben wird, um einige wichtige Zahlen zu berechnen und auszugeben, um dasselbe für eine große Anzahl von Dateien zu tun, die Text in einem lokalen Verzeichnis enthalten. Das Problem liegt in meinem Unverständnis dafür, wie oder warum der Code von der Site den eingegebenen Text aufteilt, indem nach & und = gesucht wird, da der eingegebene Text niemals diese Zeichen enthält, und auch nicht meine Dateien. Hier ist ein Teil des Codes aus dem Online-Programm:PERL/CGI- bekommt mehr als Text aus Eingabetextbereich

if ($ENV{'REQUEST_METHOD'} ne "POST") { 
    &error('Error','Use Standard Input by METHOD=POST'); 
} 

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 

if ($buffer eq '') { 
    &error('Error','Can not execute directly','Check the usage'); 
} 

$ref = $ENV{'HTTP_REFERER'}; 

@pairs = split(/&/,$buffer); 

foreach $pair (@pairs) { 
    ($name,$value) = split(/=/,$pair); 
    if ($name eq "ATOMS") { $atoms = $value; } 

Es verwendet dann diese „Paare“, um in geeigneter Weise die erforderlichen Zahlen zu berechnen. Die Eingabe von dem Benutzer einfach ein Textfeld „Atom“ genannt, und die Form Aktion für den CGI-Skript:

<form method=POST action="/path/to/the/cgi/file.cgi"> 
<textarea name="ATOMS" rows=20 cols=80></textarea> 
</form> 

ich sowohl die weniger wichtigen Details des HTML und Perl-Codes weggelassen habe. Bisher konnte ich den gesamten Inhalt aller Dateien in einem bestimmten Verzeichnis in einem Textformat abrufen, aber wenn ich dies in das Skript eingab, das den Text aus Textarea verwendet, um die Werte zu berechnen (anstelle von Variable $ buffer), funktioniert es nicht, was vermutlich auf die geteilten Codes zurückzuführen ist, die die & und = Symbole nicht finden können. Wie erhält der Code diese Symbole aus dem Online-Skript und wie kann ich diese für meine lokalen Dateien verwenden? Lassen Sie mich wissen, wenn zusätzliche Informationen benötigt werden, und bedanken Sie sich im Voraus!

+3

Der Code, den Sie dort haben, ist ** Old ** mit einer Hauptstadt O. – simbabque

Antwort

2

Das Codierungsschema verwendet (standardmäßig) für POST-Daten über HTTP besteht aus key=value Paaren (daher die =), die durch & Zeichen getrennt sind.

Letzteres spielt für Ihr Formular keine große Rolle, da es nur ein Steuerelement enthält.

Dies wird in the HTML 4 specification und ausführlicher in the HTML 5 specification ziemlich kurz beschrieben.

Wenn Sie sich nicht mit Daten aus einem Formular beschäftigen, sollten Sie den gesamten Formulardecodierungscode entfernen.

+0

Danke für die Hilfe! Ich habe den Decodierungscode einfach gelöscht, wie Sie es vorgeschlagen haben, und es funktioniert genauso wie online! –

0

Nicht sicher, woher du diesen Code hast, aber es ist prähistorisch (aus dem letzten Jahrtausend).

Sie sollten in der Lage sein, alles mit zu ersetzen.

use CGI ':cgi'; 

my $atoms = param('ATOMS'); 
Verwandte Themen