2011-03-03 54 views
-1

我使用PHP來獲取一個字符串,例如:'3 * 2',並調用java(通過exec())來計算這個值,但即使我用'\ *'替換'* ',它仍然沒有工作。當我將這些參數傳遞給命令行時,它適用於'\ *',而不是'*'。我怎樣才能輸入星號,以便命令行可以理解?我不想改變我的程序與''一起工作到java文件中的其他位置。我正在使用Ubuntu。如何輸入星號到命令行中以便理解?

+0

'\ *'怎麼了? – Jordan 2011-03-03 03:32:42

+0

字符串變成'3 \\ * 2',但java拋出錯誤:線程「main」中的異常java.lang.NumberFormatException:對於輸入字符串:「。」 – Silentbang 2011-03-03 03:48:41

+0

surly java有一個剝離斜線的功能 – 2011-03-03 03:58:25

回答

1

可以使用escapeshellarg()在PHP逃脫你的論點

+0

是的。這實際上解決了我的問題。非常感謝 – Silentbang 2011-03-03 05:58:56

0

這是一個非常混亂的問題。我不得不猜測「通過命令行傳遞了這些參數」這樣的事情,這些參數可能意味着沒有任何意義。這個答案是基於猜測你的問題在英文中的含義。

似乎你可以從命令行調用你的Java程序,只要你轉義的shell的元字符,否則爲你滿意。這是正常的和預期的,而且每個使用shell運行其命令行語法中包含字符(如*)的程序的人都應該很熟悉。

您的實際問題似乎是您無法在PHP腳本中調用此相同的Java程序,因爲您將'3 * 2'(帶引號)作爲提供給exec()的單個命令行參數傳遞給它。再次,這裏的問題很可能是另一個衆所周知的問題。當使用命令行3 \* 2(不帶引號,通知)通過shell運行程序時,shell實際上將其拆分爲三個命令行參數,即3,*2,它們是shell實際提供的參數到底層的execve()系統調用。所以這就是你的Java程序所期待的。您需要確保這是從PHP調用程序時發生的情況。