Php 不支持数学字符
Php doesn't support math characters
我正在将 latex 转换为 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文件通过命令行,它会生成所需的输出文件,如下所示
命令行脚本: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'。这是字符编码问题吗?如何解决这个问题。
您可以尝试改写 𝒇 。
我的意思是:使用十六进制实体而不是使用字符。
以上数字取自http://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols#Unicode_chart .
请务必在将任何输出发送到浏览器之前添加此行:
header('Content-Type: application/mathml+xml; charset=utf-8');
这样,您就可以告诉浏览器您的页面将是一个采用 UTF-8 编码的 MathML 文件。如果您使用的是 Web 服务器,请务必将所需的 MIME 类型添加到支持的格式列表中。
另一方面,您可以将 utf-8 header 添加到文件本身。根据维基百科,这应该是您文件的 header:
<?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">
我只是像下面这样更改了语言 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
我正在将 latex 转换为 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文件通过命令行,它会生成所需的输出文件,如下所示
命令行脚本: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'。这是字符编码问题吗?如何解决这个问题。
您可以尝试改写
我的意思是:使用十六进制实体而不是使用字符。
以上数字取自http://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols#Unicode_chart .
请务必在将任何输出发送到浏览器之前添加此行:
header('Content-Type: application/mathml+xml; charset=utf-8');
这样,您就可以告诉浏览器您的页面将是一个采用 UTF-8 编码的 MathML 文件。如果您使用的是 Web 服务器,请务必将所需的 MIME 类型添加到支持的格式列表中。
另一方面,您可以将 utf-8 header 添加到文件本身。根据维基百科,这应该是您文件的 header:
<?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">
我只是像下面这样更改了语言 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