Naja, wirklich aufrufen tust Du nur ein Programm, nämlich xvfb-run.
Das nimmt dann eine Argumentliste und startet dann das entsprechende Programm, das in der Argumentliste enthalten ist.
Um nicht in die Quoting-Falle zu tappen, würde ich mal das Kommando als Liste übergeben. Was ist, wenn Deine
$source und
$destination Leerzeichen enthalten? Wenn Du Elemente des Kommandos als Liste übergibst, ist eine
$source auch mit Leerzeichen nur ein einzelnes Argument.
Das Kommando wird außerdem direkt gestartet, ohne dass eine Shell-Instanz gestartet wird, die auch nochmal interpretieren will.
Es ist ausserdem sinnvoll, den Rückgabewert zu überprüfen:
my @cmd = (
'xvfb-run',
"--server-args='-screen 0, 1024x768x24'",
'wkhtmltopdf'
$source,
$destination,
);
system( @cmd ) == 0
or die "Command <<@cmd>> not successful: $!\n";
Deine "lustigen" Zeichen schauen nach Kodierungsproblemen aus; UTF8 vs iso-8859-* .
Möglicherweise enthält die Originaldatei bereits fehlerhaft kodierte Zeichen? Evtl. sind die Kodierungsangaben im HTML falsch? Schwer zu raten...
Da mögen andere mit mehr Wissen dazu sich zu äußern.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!