Я создаю интерфейс между swi-prolog и php. PHP пишет команды, которые он хочет, чтобы пролог запускал в файле, а затем выполняет системный вызов, поэтому пролог запускает файл. Проблема в том, что когда в файле есть специальные символы (например, á, í, ã, ê и т. д.), эти символы заменяются на � в выводе пролога, я знаю, что этот код для неизвестные/неопознанные кодовые точки, но мне не удалось решить проблему, с которой Я нашел в Интернете. Если запустить файл из терминала самостоятельно, он показывает правильные символы, просто когда 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.
Кто-нибудь знает, как заставить его правильно интерпретировать строку?