php – 将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> 预期的结果应该在文本文件中看起来像这样(列很好地对齐): test product 5 £50.00 Project Name: Test Project Page 1 : 01 New York 1.jpg £0.00 我的想法是通过DOMDocument解析HTML内容.然后我将为表设置默认宽度(即:100个空格),然后将每列的宽度从%转换为空格数(基于< td>标记的colspan& width属性).然后我将这些列宽减去每列中数据的strlen,以将pad_right所需的空格数归档到字符串,使所有内容垂直对齐. 我一直在那样工作,没有归档我想要的东西,但只是想知道它是愚蠢还是有人知道更好的方法请帮助我. 此外,当谈到多字节语言(日语,韩语等…)时,我认为我的方法不会起作用,因为它们的字符将比一个空格大,并且最终会变得混乱. 有人可以帮帮我吗?
不要重新发明轮子.表格渲染很困难,只使用文本渲染表格更加困难.
为了阐明提供HTML所有功能的基于文本的表格渲染器的复杂性,请查看w3m,它是开源的: these 3000 lines of code只显示html表. 将HTML转换为文本 有一些基于文本的浏览器可以被命令行使用,比如lynx. 注意:基于文本的浏览器通常用在shell中,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 CLIFrameworkComponentTableTable; $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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |