Php不支持数学字符

时间:2015-02-23 10:35:05

标签: php shell special-characters equation

我在php中将latex转换为mathml的过程中.Texmath是一个命令行工具,通过它可以完成转换过程。

Latex文件:

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

test.php的:

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

如果我运行这个php文件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>

它会忽略所有mathtype字符。为什么它只通过命令行而不是通过浏览器提供所需的输出。当我在编辑器中打开这两个文件时,它会显示&#39; UTF-8&#39;。这是字符编码问题吗?如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

在将任何输出发送到浏览器之前,请务必添加此行:

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

这样,您告诉浏览器您的页面将是具有UTF-8编码的MathML文件。如果您使用的是Web服务器,请务必将所需的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">

答案 1 :(得分:0)

您可以尝试编写&lt; mi&gt;&amp;#x1D487;&lt; / mi&gt;代替。

我的意思是:使用十六进制实体而不是使用字符。

上述数字取自http://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols#Unicode_chart

答案 2 :(得分:0)

我刚刚在shell_exec

之前更改了lang
$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