2016-09-28 70 views
0

在PHP中使用sprintf時,假設%d將始終嘗試將該參數強制轉換爲整數是否安全?PHP sprintf%d行爲

例如:

<?php 

echo sprintf('Hello %d', 'foo'); 
echo sprintf('Hello %d', -1); 
echo sprintf('Hello %d', 1); 
echo sprintf('Hello %d', 0.1); 
echo sprintf('Hello %d', true); 
echo sprintf('Hello %d', false); 
echo sprintf('Hello %d', null); 
echo sprintf('Hello %d', array('foo')); 
echo @sprintf('Hello %d', new stdClass()); 

我不是用這個來防止SQL注入(已經有參數化查詢我的應用程序),而是構建一個URL查詢參數。

+5

很明顯[記錄](http://php.net/sprintf):'變量將被合成爲指定符合適的類型。然而,將對象傳遞給需要字符串(比如說)的東西需要對象實現magic __toString()方法。 PHP將無法轉換所有類型,只是知道如何去做。 –

+0

@MarcB哎呀我錯過了文檔中的表格。如果你想把它作爲答案,那麼我會接受它 –

回答

0

很清楚documentedVariables will be co-erced to a suitable type for the specifier

但是,將對象傳遞給需要字符串(例如)的內容將需要對象實現魔術__toString()方法。 PHP將無法轉換所有類型,只是知道如何去做。