gpt4 book ai didi

php - 将 HTML 表格转换为文本

转载 作者:太空狗 更新时间:2023-10-29 13:25:54 24 4
gpt4 key购买 nike

我正在从事一个需要将 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>

预期结果在文本文件中应如下所示(列对齐得很好):

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

我的想法是通过 DOMDocument 解析 HTML 内容。然后我将为表格设置默认宽度(即:100 个空格),然后将每列的宽度从 % 转换为空格数(基于 colspanwidth 标签的 <td> 属性)。然后我将这些列宽减去 strlen每列中的数据以存档我需要 pad_right 到字符串以使所有内容垂直对齐的空格数。

我一直以这种方式工作,还没有归档我想要的东西,但只是想知道它是否愚蠢或者有人知道更好的方法请帮助我。

此外,当涉及到多字节语言(日语、韩语等...)时,我认为我的方法行不通,因为它们的字符将大于一个空格,最终会变得一团糟。

有人可以帮帮我吗?

最佳答案

不要重新发明轮子。表格渲染很难,仅使用文本渲染表格更难。要阐明提供 HTML 所有功能的基于文本的表格呈现器的复杂性,请查看开源的 w3m: these 3000 lines of code是否仅用于显示 html 表格。

将 HTML 转换为文本

有一些可以通过命令行使用的基于文本的浏览器,比如 lynx。您可以将您的 html 表格fwrite 放入一个文件中,将该文件传递到基于文本的浏览器中并获取其输出。

注意:基于文本的浏览器通常在 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);

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();

然而,CLIFramework 表格渲染器似乎不支持任何类似于“colspan”的东西。

这是表格组件的文档:https://github.com/c9s/CLIFramework/wiki/Using-Table-Component

关于php - 将 HTML 表格转换为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com