编写输出文件时html2text奇怪的缓冲输出问题

时间:2014-11-16 20:45:29

标签: php linux character-encoding

我通过PHP exec命令运行html2text命令,将HTML转换为iMac上的纯文本。但是我得到了一些非常奇怪的输出,字母重复,一些随机的次数以及变得奇怪的字符。

示例输出(通过保存Stack Overflow主页的HTML然后通过html2text运行)。

cc uu_rr_rr_ee_nn_tt_ cc oo_mm_mm_uu_nn_ii_tt_yy 的     * c h_a_t b l_o_g l o_g_ o u_t        S t_a_c_k_ O v_e_r_f_l_o_w

每次我使用命令行程序时都会发生这种情况,我尝试过各种HTML页面。

我不太了解字符编码以及html2text写入其输出缓冲区的方式。我试图使用-ascii和-utf8标志,这些标志确实没有任何区别。

我还尝试了不同的方法来设置程序的输入/输出,例如:

html2text <<< $string;
html2text <<< $string > output.txt

当然还有记录的方式

html2text -o $outputTextFile $inputHtmlFile

我甚至尝试将输出直接加载到我的PHP代码中的字符串中,然后使用file_put_contents来保存它(我认为它可能与流/缓冲区有关)但它以相同的方式保存。奇怪的是,如果我将文本直接输出到命令行,输出看起来没问题。

我现在完全没有想法了,我花了两天的时间试图弄清楚它是怎么回事。

以前是否有人遇到类似问题?

由于

1 个答案:

答案 0 :(得分:1)

因此,如果您运行命令html2text -o file.txt page.html

  • 在shell中,它按预期工作
  • 在php中,有exec,它会产生奇怪的文字吗?

故障排除

首先,我会测试一个简单的测试html文件,例如这个

<强> file.html

<!DOCTYPE HTML>
<html>
<head></head>
<body>
    <span>I'm a simple html file</span>
</body>
</html>

我还会用这些行创建一个小的php文件:

<强> simple.php

<?php
exec('html2text -o file.txt page.html');

我会在shell运行中测试它:

html2text -o file1.txt page.html    php simple.php


如果生成的文件相等

  1. 我会增加file.html的复杂性(总是使用本地文件),直到我足够满意(或有些中断)。
  2. 如果1有效,那么我会尝试使用网页(直到出现故障或尝试了足够的测试)
  3. 然后我会增加php文件的复杂性,一次添加一个功能,直到它中断。

  4. 如果生成的文件不同

    1. 首先,我要确保使用相同的库(php用户可能正在使用不同的库,也许)。我可以通过使用:
        在shell和php脚本中
      • which command which -a html2text
      • 使用bin的完整路径,例如:/ usr / local / bin / html2text
    2. 如果结果仍然不同,那么我会尝试使用 proc_open 而不是exec,并检查STDERR和STDOUT是否有错误或警告。