2016-06-21 57 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)) –