我正在尝试使用shell_exec()
在远程(当前虚拟)Linux服务器上运行Perl脚本。 Perl文件需要3个参数,文件名,编码和文件内容。
将特定行写入其他人制作的Perl文件中。
脚本应使用arg[0]
中的文件名打开文件,文件名在arg[1]
中,并在arg[2]
中写入内容。
我设法让它工作,因为它将内容写入文件,但由于这个程序写入编码很重要的文件,我将不得不用最初的相同编码来编写它们,因为我们使用重音字符,我需要确保它们也能正常工作。我怎么能这样做?
如果需要,我会添加代码。
编辑:代码:
的Perl:
#!/usr/bin/perl -w
use warnings;
#use strict;
my $fileName = "";
my $contents = "";
my $encoding = "";
if(@ARGV != 3){
print "use: documentor_write_file fileName encoding contents";
exit;
}else{
$fileName = $ARGV[0];
$encoding = $ARGV[1];
$contents = $ARGV[2];
}
sub write_file{
open(DATA,"> :encoding($encoding)",$fileName);
$contents =~ s/&/&/g;
$contents =~ s/$/$/g;
$contents =~ s/</</g;
$contents =~ s/>/>/g;
$contents =~ s/\\"/\"/g;
$contents =~ s/¢/¢/g;
$contents =~ s/£/£/g;
$contents =~ s/¥/¥/g;
$contents =~ s/€/€/g;
$contents =~ s/©/©/g;
$contents =~ s/®/®/g;
print(DATA);
print DATA $contents;
}
write_file;
close(DATA);
exit;
PHP:
if(isset($_GET['stf'])){
$ret = "";
$fn = $_POST['fn']; //File name
$enc = $_POST['enc']; //Encoding
$cont = $_POST['content']; //Content
$cont = str_replace("\"","\\\"", $cont); //Replaces " with \"
$cont = pg_escape_string($cont); //
$cont = htmlspecialchars(htmlentities($cont)); //
$cont = str_replace("$", "$", $cont); //replaces $ with $
$cmd2 = "perl /documentor_write_file.pl $fn $enc " . "\"" . $cont . "\"";
$ret = shell_exec($cmd2);
//print($ret . " - " . $cmd2);
}
示例:
文件内容:(Perl文件)
#!/usr/bin/perl -w
BEGIN{push @INC,"/usr/local/dpdregister/processes/common/";}
eval {require 'dpdregister.conf'; use vars qw ( $dbh ) };
=history
<HIST>
history2 áéűáé
több history
</HIST>
=cut
它实际写入文件的内容:
#!/usr/bin/perl -w
BEGIN{push @INC,\&quot;/usr/local/dpdregister/processes/common/\&quot;;}
eval {require ''dpdregister.conf''; use vars qw ( $dbh ) };
=history
&lt;HIST&gt;
history2 &aacute;&eacute;\x{00c5}\x{00b1}&aacute;&eacute;
t&ouml;bb history
&lt;/HIST&gt;
=cut
答案 0 :(得分:0)
以UTF-8编写所有内容会不会更容易?
需要将所有这些Perl文件一次性转换为UTF-8(如果需要,也可以在Perl中完成;只是不要忘记设置use utf8;
编译指示),但之后您只需要检查发送到文件的内容实际上是UTF-8。