2015-02-23 36 views
0

我正在將latex轉換爲mathml的過程中,php.Texmath是通過它可以完成轉換過程的命令行工具。Php不支持數學字符

乳膠文件:

\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 f通過瀏覽器得到輸出文件,如

<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

1

一定要加入這一行之前的任何輸出發送到瀏覽器:

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

這樣一來,你告訴你的瀏覽器頁面將是一個MATHML使用UTF-8編碼文件。如果您使用的是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"> 
+0

我最好的猜測會是字符集確實 – hanshenrik 2015-02-23 21:06:50

+0

我試過'header('Content-Type:application/xml; charset = utf-8') ;'它沒有任何改變。然後嘗試'header('Content-Type:application/mathml + xml; charset = utf-8');'下載php文件 – Learning 2015-02-24 06:14:01

+0

附加說明:如果我在本地主機服務器上運行php文件,它會給出想要的結果。如果在Web服務器中編碼問題,那麼本地主機如何輸出具有特殊字符的文件。我不明白。我掙扎了兩天 – Learning 2015-02-24 06:23:21