我正在创建 swi-prolog 和 php 之间的接口。php 编写它希望 prolog 在文件上运行的命令,然后进行系统调用,以便 prolog 运行该文件。问题是当文件中有特殊字符(如á、í、ã、ê 等...)时,这些字符在 prolog 的输出中被 \uFFFD 替换,我知道此代码点用于未知/未识别codepoints,但我没有成功解决我在互联网上找到的问题。如果我自己从终端运行文件,它会显示正确的字符,就在 php 从 exec 或 shell_exec 运行时,它似乎失去了理由。
这是使用的代码,首先是php:
$arquivo = fopen("/home/giz/prologDB/run.pl", w);
$run = <<<EOT
go :-
consult('/home/giz/prologDB/pessoasOps.pl'),
addPessoa(0,'$name','$posicao','$resume','$unidade','$curso','$disciplina',$alunos,[]),
halt.
EOT;
echo $run;
fwrite($arquivo, $run);
$cmd = "prolog -f /home/giz/prologDB/run.pl -g go";
exec( $cmd, $output );
echo "\n";
print_r( $output );
echo "\n";
序言代码:
addPessoa(LOCAL, NOME, POSICAO, RESUMO, UNIDADE, CURSO, DISCIPLINA, ALUNOS, REFERENCIA):-
write( 'Prolog \nwas called \nfrom PHP \nsuccessfully.\n' ),
write('pessoa('),
write(LOCAL),
write(',\''),
write(NOME),
write('\',\''),
write(POSICAO),
write('\',\''),
write(RESUMO),
write('\',\''),
write(UNIDADE),
write('\',\''),
write(CURSO),
write('\',\''),
write(DISCIPLINA),
write('\','),
write(ALUNOS),
write(','),
write(REFERENCIA),
write(').\n'),
make.
有人知道如何让它正确解释字符串吗?