Thread Html5 contenteditable - PHP -> Perl
(12 answers)
Opened by meier19 at 2016-04-19 17:13
display_save_text.cgi
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 #!/usr/bin/perl #Warnungen und Fehlemeldungen einschalten use strict; use warnings; #das Script ist UTF-8 use utf8; #CGI-Modul laden #und sagen das alles UTF-8 ist use CGI ( -utf8 ); #Modul um Fehler im Browser ausgeben use CGI::Carp 'fatalsToBrowser'; #Modul um Dateien sperren zu können. Siehe "flock" use Fcntl qw(:flock); #Dateiname my $storage_file = 'myText.txt'; #Default Wert, wenn nichts eingeben wurde. my $str = 'Dies ist die Zeile, die verändert werden kann.'; # Das HTML das angezeigt werden soll my $template = <<'EOHTML'; <!DOCTYPE html> <html> <head> <script> function myFunction () { var xr = new XMLHttpRequest(); var url = "INSERT_URL_HERE"; var text = document.getElementById("myDiv").innerHTML; var vars = "newText="+text; xr.open("POST", url, true); xr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xr.send(vars); } </script> </head> <body> <h1>Hello World</h1> Die nachfolgende Zeile kann Text aufnehmen: <div id="myDiv" contenteditable="true" onblur="myFunction()"> <!--INSERT_TEXT_HERE--> </div> <body> </html> EOHTML # neue CGI-Instanz erzeugen my $cgi = CGI->new(); # schauen ob eine Datei mit dem text da ist, # Daten mit UTF-8 kodierung lesen if(open(my $fh, '<:encoding(UTF-8)', $storage_file)) { #Zeilenumbrüche nicht beachten local $/=undef; # ganze Datei lesen $str = <$fh>; close($fh); } # ein string wurde gesendet if( my $s = $cgi->param('newText') ) { # Daten übernehmen $str = $s; # Datei zum schreiben öffnen, Daten mit UTF-8 Kodierung schreiben open(my $fh, '>encoding(UTF-8)', $storage_file) or die("ERROR OPEN $storage_file ($!)"); # Datei sperren das nur ein Prozess schreiben darf flock($fh, LOCK_EX); # daten schreiben print $fh $str; # datei wider freigeben close($fh); } #platzhalter im Template ersetzen $template=~s/<\!--INSERT_TEXT_HERE-->/$str/g; $template=~s/INSERT_URL_HERE/$cgi->url()/eg; #Header ausgeben der Inhalt ist UTF-8 print "Content-Type: text/html; charset=UTF-8\r\n\r\n"; # Ausgabe UTF-8 kodieren; binmode(STDOUT,'encoding(UTF-8)'); #template ausgeben print $template; Aufruf: <dein_server>/cgi-bin/display_save_text.cgi |