2015-02-23 4 views
0

Я в процессе преобразования латекса в mathml в php.Texmath - это инструмент командной строки, через который можно выполнить процесс преобразования.Php не поддерживает математические символы

Latex файл:

\mathbf{f} = (f_{1}, 
f_{2})^{\prime} 

test.php:

shell_exec('echo "password" | sudo -S /root/.cabal/bin/texmath latexfile > outputfile'); 

Если я запускаю этот файл PHP Копания командной строки, он создает желаемый выходной файл, который находится ниже строка сценария команды: php test.php

<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"> 
    <mrow> 
    <mstyle mathvariant="bold"> 
     <mi></mi> 
    </mstyle> 
    <mo>=</mo> 
    <mo stretchy="false" form="prefix">(</mo> 
    <msub> 
     <mi>f</mi> 
     <mn>1</mn> 
    </msub> 
    <mo>,</mo> 
    <msub> 
     <mi>f</mi> 
     <mn>2</mn> 
    </msub> 
    <msup> 
     <mo stretchy="false" form="postfix">)</mo> 
     <mo>′</mo> 
    </msup> 
    </mrow> 
</math> 

Когда я запускаю этот php f ile через браузер, получая выходной файл, такой как

<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"> 
    <mrow> 
    <mstyle mathvariant="bold"> 
     <mi> 

Он игнорирует все символы математического характера. Почему он дает желаемый результат только через командную строку не через браузер. Когда я открываю эти два файла в редакторе, он отображает «UTF-8». Это проблема кодирования символов? Как это решить.

ответ

0

Просто я изменил Ланг, как показано ниже, прежде чем shell_exec

$locale = 'en_US.utf-8'; 
setlocale(LC_ALL, $locale); 
putenv('LC_ALL='.$locale); 
shell_exec('echo "password" | sudo -S /root/.cabal/bin/texmath latexfile > outputfile'); 

Затем он создает файл со специальными символами. Ссылка на SO

0

Вы можете попробовать написать < mi> & # x1D487; </mi> вместо этого.

Я имею в виду: используйте шестнадцатеричную сущность вместо использования символа.

Приведенное выше число было взято из http://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols#Unicode_chart.

+0

Сначала я должен получить специальный символ только тогда, когда я могу заменить шестнадцатеричным сущностью. В выходном файле не отображаются специальные символы, тогда как я могу изменить его в шестнадцатеричном объекте – Learning

1

Обязательно добавьте эту строку перед любым выводом отправляются в браузер:

header('Content-Type: application/mathml+xml; charset=utf-8'); 

Таким образом, вы сообщаете браузер, ваша страница будет MathML файл с UTF-8 кодировкой. Если вы используете веб-сервер, обязательно добавьте требуемый тип MIME в список поддерживаемых форматов.

С другой стороны, вы можете добавить заголовок utf-8 к самому файлу. Согласно Википедии, это должно быть заголовок файла:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" 
     "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd"> 
+0

. Лучше всего было бы считать кодировку действительно – hanshenrik

+0

Я попытался 'header ('Content-Type: application/xml; charset = utf-8') ; «Он не вносит никаких изменений. Затем попытался 'header ('Content-Type: application/mathml + xml; charset = utf-8');' его загрузка php-файла – Learning

+0

. Дополнительное примечание: если я запустил php-файл на локальном хост-сервере, он даст желаемый результат. Если проблема с кодировкой в ​​веб-сервере, то как локальный хост выдает файл со специальным символом. Я не понимаю. Я борюсь за два дня – Learning

Смежные вопросы