Oli*_*izt 9 html php text html-table
我正在开发一个需要将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>
Run Code Online (Sandbox Code Playgroud)
预期的结果应该在文本文件中看起来像这样(列很好地对齐):
test product 5 £50.00
Project Name: Test Project
Page 1 : 01 New York 1.jpg £0.00
Run Code Online (Sandbox Code Playgroud)
我的想法是通过DOMDocument解析HTML内容.然后,我将设置表(即:100位)具有默认宽度然后从转换%每列的宽度的空格数(基于colspan&width的属性<td>标记).然后我将这些列宽减去strlen每列中的数据,以将pad_right所需的空格数归档到字符串,使所有内容垂直对齐.
我一直在那样工作,没有归档我想要的东西,但只是想知道它是愚蠢还是有人知道更好的方法请帮助我.
此外,当谈到多字节语言(日语,韩语等...)时,我认为我的方法不会起作用,因为它们的字符将超过一个空格并且最终会变得混乱.
有人可以帮帮我吗?
Rom*_*man 11
不要重新发明轮子.表格渲染很困难,只使用文本渲染表格更加困难.为了阐明提供HTML的所有功能的基于文本的表格渲染器的复杂性,请查看w3m,它是开源的: 这3000行代码只用于显示html表格.
有一些基于文本的浏览器可以被命令行使用,比如lynx.您可以fwrite将html表放入文件中,将该文件传递到基于文本的浏览器并获取其输出.
注意:基于文本的浏览器通常用在shell中,它通常以等宽字体显示.这仍然是先决条件.
lynx和w3m都可以在Windows上使用,你不需要"安装"它们,你只需要拥有可执行文件和从PHP运行它们的权限.
代码示例:
<?php
$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);
$myTextTable = shell_exec("w3m.exe -dump \"$tmpfname\"");
unlink($tmpfname);
Run Code Online (Sandbox Code Playgroud)
w3m.exe 需要在您的工作目录中.
(没试过)
如果你想有一个本地的PHP解决方案,这里还有至少一个框架(https://github.com/c9s/CLIFramework旨在为PHP具有表格绘制控制台应用程序).
它不会将HTML转换为文本,但它可以帮助您构建一个支持多行单元格的文本格式表(这似乎是最复杂的部分).
使用CLIFramework,您需要这样的代码来呈现您的表:
<?php
require 'vendor/autoload.php';
use CLIFramework\Component\Table\Table;
$table = new Table;
$table->addRow(array(
"test product", "5", "£50.00"
));
$table->addRow(array(
"Project Name: Test Project", "", ""
));
$table->addRow(array(
"Page 1 : 01 New York 1.jpg", "", "£0.00"
));
$myTextTable = $table->render();
Run Code Online (Sandbox Code Playgroud)
然而,CLIFramework表呈现器似乎不支持类似于"colspan"的任何内容.
这是表组件的文档:https://github.com/c9s/CLIFramework/wiki/Using-Table-Component
| 归档时间: |
|
| 查看次数: |
5996 次 |
| 最近记录: |