不要重新发明轮子.表格渲染很困难,只使用文本渲染表格更加困难.
为了阐明提供HTML所有功能的基于文本的表格渲染器的复杂性,请查看w3m,它是开源的:
these 3000 lines of code只显示html表.
将HTML转换为文本
有一些基于文本的浏览器可以被命令行使用,比如lynx.
您可以将html表转换为文件,将该文件传递到基于文本的浏览器并获取其输出.
注意:基于文本的浏览器通常用在shell中,shell通常以等宽字体显示.这仍然是先决条件.
lynx和w3m都可以在Windows上使用,你不需要“安装”它们,你只需要拥有可执行文件和从PHP运行它们的权限.
代码示例:
$table = '
foo | bar |
$html = "
$table";//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);
w3m.exe需要在您的工作目录中.
(没试过)
渲染文本表
如果你想要一个原生的PHP解决方案,那么至少有一个框架(https://github.com/c9s/CLIFramework)针对PHP的控制台应用程序,它有一个表格渲染器.
它不会将HTML转换为文本,但它可以帮助您构建一个支持多行单元格的文本格式表(这似乎是最复杂的部分).
使用CLIFramework,您需要这样的代码来呈现您的表:
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();
然而,CLIFramework表呈现器似乎不支持类似于“colspan”的任何内容.