Php не поддерживает математические символы

0

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

Латексный файл:

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

test.php:

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

Если я запустил эту командную строку php file thorugh, она генерирует желаемый выходной файл, который находится ниже сценария командной строки: 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 файл через браузер, я получаю выходной файл как

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

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

Теги:
special-characters
equation

3 ответа

0
Лучший ответ

Просто я изменил lang, как показано ниже, перед 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');

Затем он генерирует файл со специальными символами. Отсылается из qaru.site/questions/3048058/...

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
    мое лучшее предположение было бы действительно кодировкой
  • 0
    Я пробовал header('Content-Type: application/xml; charset=utf-8'); Это не делает никаких изменений. Затем попробовал header('Content-Type: application/mathml+xml; charset=utf-8'); его загрузка файла php
Показать ещё 4 комментария
0

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

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

Вышеуказанное число было взято из http://en.wikipedia.org/wiki/Matлокального_Alphanumeric_Symbols#Unicode_chart.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню