2012-06-19 5 views
8

私は、HTMLの電子メールをテキストに変換する必要があるプロジェクトに取り組んでいます。下記のHTMLコードの簡易版である:HTMLテーブルをテキストに変換する

<table> 
    <tr> 
     <td width="10%"></td> 
     <td width="60%"> test product </td> 
     <td width="20%">5</td> 
     <td width="10%"> £50.00 </td> 
    </tr> 
    <tr> 
     <td></td> 
     <td colspan="3" width="100%"> Project Name: Test Project </td> 
    </tr> 
    <tr> 
     <td width="10%"> </td> 
     <td colspan="2" width="80%"> Page 1 : 01 New York 1.jpg </td> 
     <td width="10%"> £0.00 </td> 
    </tr> 
</table> 

期待される結果が(うまく整列列を持つ)テキストファイルに次のようになります。私の考えはでHTMLコンテンツを解析している

test product          5   £50.00 
Project Name: Test Project                
Page 1 : 01 New York 1.jpg         £0.00 

DOMDocument。その後、私は、スペースの数%まで、各列の幅を変換テーブル(すなわち.: 100個のスペース)のデフォルトの幅を設定します(<td>タグのcolspan & width属性に基づいて)。次に、これらの列の幅を各列のデータのstrlenに引き下げて、すべてを垂直に整列させるためにpad_rightに必要なスペースの数をアーカイブします。私はそのように取り組んできました

、それは愚かであるか、誰も私を助けてくださいより良い方法を知っていれば私は疑問に思ったが何をしたいアーカイブされていません。それはマルチバイト言語(日本語、韓国語など)になると自分のキャラクターが1つのスペースよりも大きくなり、それが混乱してしまうので、

また、私は私のアプローチがうまくいくとは思いません。

誰かが私を助けてくれますか?

+4

これは、テキストがモノスペースフォントで表示されている場合にのみ機能します。 – Roman

+3

?マルチバイトは、あなたのtxtファイルにもっと多くのスペースを取らない(/すべきではありません)。 – PeeHaa

+1

予想より広い列がある場合はどうしますか? –

答えて

11

これは単なるアイデアです。

ホイールを改造しないでください。テーブルのレンダリングは難しく、テキストのみを使用してレンダリングするテーブルはさらに困難です。

lynxのように、コマンドラインで使用できるテキストベースのブラウザがあります。 あなたのHTMLテーブルをファイルに書き込んで、そのファイルをテキストベースのブラウザに渡して出力することができます。

注textbasedブラウザは一般的に、一般的に等幅で表示シェルで使用されます。これは前提条件です。

lynxとw3mはどちらもWindowsで利用できます。テキストベースのテーブルレンダラーの複雑さを明らかにするには、オープンソースであるw3mを見てください。 These 3000 lines of codeは、htmlテーブルを表示するためだけにあります。

UPDATE

コード例:

$table = '<table><tr><td>foo</td><td>bar</td></tr></table>'; //this contains your table 
$html = "<html><body>$table</body></html>"; 

//write html file 
$tmpfname = tempnam(sys_get_temp_dir(), "tblemail"); 

$handle = fopen($tmpfname, "w"); 
fwrite($handle, $html); 
fclose($handle); 

$text = shell_exec("w3m.exe -dump \"$tmpfname\""); 
unlink($tmpfname); 

echo "<pre>$text</pre>"; 

w3m.exeが作業ディレクトリにする必要があります。

(試していません)

+0

ありがとう、問題は、この変換は自動でなければならない&私は本当にLynxをインストールすることはできませんので、ウィンドウサーバー上で実行される当社のソフトウェアの一部です。 – Olizt

+1

ああ、私はそれが自動的になると思った。アイデアはそれを自動化することでした。 PHPはファイルを書き込み、ブラウザを実行します(shell_exec)。私はコード例を追加します – Roman

+0

@Olizt上記参照: "lynxとw3mは両方ともWindows上で利用可能です!" – feeela

関連する問題