2016-06-21 56 views
2

在Linux中有一些背景我已经习惯了这些所谓的oneliners。今天,我想用一些来自核心PHP的html_entity_decode将一些HTML垃圾(实体)转换为纯文本。如何为标准输入中的每一行执行PHP函数?

例如

>> html_entity_decode('>') 
'>' 

根据翻译的帮助下,这可以与-R选项来完成的;

用法:PHP [选项] [-f] [ - ] [参数...] (...) -R <代码>运行PHP <代码>对每个输入线 (。 ..)

但是,经常当我认为PHP很棒的时候,它让我有理由不这样认为(原谅态度);

seq 10 | php -R 'echo fgets(STDIN);' 
2 
4 
6 
8 
10 

......就情况而言,说明问题通常会导致解决方案。所以我在写这个问题的时候就想出了问题。由于PHP在终止时关闭了打开的文件句柄(参见freeing resources),并且由于某些!诱惑实现细节而丢弃每第二行,因此标准输入被关闭。

感谢您的阅读,你可以随时打高尔夫球我的解决办法,如果你喜欢...


有关关闭文件中的部分处理自动推断,因为变量超出范围主要被弹出从执行堆栈。我还没有找到这在php.net记录。

+0

不知道你在问 – 2016-06-21 08:31:29

+0

@Dagon我可以重新整理/在莱特 - 讲翻译一下? –

+0

我会解决英语 – 2016-06-21 08:43:50

回答

2

使标准保持打开状态,用一个脚本读取所有行(iirc就像在类似的Perl oneliner中一样);

wget https://www.mountaingoatsoftware.com/agile/user-stories -O- | 
    html2text -nobs -style pretty -width 120 | 
    php -r 'while ($ii = fgets(STDIN)) 
       echo html_entity_decode($ii);' 

Hooray!

+0

当然,我们需要utf8_encode(fgets(STDIN)) –