2017-04-11 22 views
0

我打電話通過PHP C++程序,使用系統()函數:C++是否有可能將帶有換行符的文本傳遞給C++程序?

$use = '"' . $_POST['source'] . '"'; 
system("Subject " . $use); 

其中$使用存儲可能包含換行符,並且使用$ _ POST變量獲得自身傳遞給PHP程序的一些文字。如果我將這個變量傳遞給C++程序並且包含的​​文本有換行符,那麼只有第一行被傳遞給程序。我試圖通過使用兩個引號來避免這種情況,但這不起作用。因此,如果輸入是例如

word 1 
word 2 

然後只有字1被傳遞給C++程序。相反,如果輸入的形式是

word 1 word 2 

當然,一切工作正常。

如果有解決方案,我該如何解決這個問題?

+0

我_really真的really_希望這是一個腳本,不會活在公衆面前,而是隻有你能夠進入的東西。如果沒有,這是服務器的開門。 –

+0

@MagnusEriksson,公平地說,[Coliru](http://coliru.stacked-crooked.com/)可以很好地處理任意命令。你可以運行你想要的任何東西,但是你不可能完成任何破壞性的事情。 – chris

+0

var_dump($ _ POST ['source'])' – hassan

回答

4

你需要逃避$use在命令行

system("Subject " . escapeshellarg($use)) 
+0

我不知道爲什麼,但不知何故,這是行不通的。爲了測試目的,我已經在此上下文中編寫了最簡單的C++程序;它只是收集通過的輸入並將其顯示在屏幕上,但仍然只有第一個換行符之前的內容出現在屏幕上。 – AlexM

+0

不,現在我明白了。 – AlexM

0

據我所知,你只需要更換線打破了空間:

$use= str_replace ("\n", " ", $use); 
+0

是的,我也考慮過這個問題,但其缺點是文本的原始結構被破壞,因爲這個命令的結果就是所有換行符都消失了。 – AlexM

+0

是的,我沒有意識到結構很好,但你可以嘗試只替換子字符串,而不是整個字符串 –

相關問題