2013-12-11 91 views
0

我在清理數據時遇到問題。消毒隨機數據類型

是否有一個內置的php函數來清理數據,如htmlspecialchars/hmmlenteties,如果提供了一個非字符串值,它保持其原始類型。 例如:

The problem: 
    $a = 1;//(int); 
    $b = htmlspecialchars($a); 
    var_dump($b); // string "1" 
The desired effect: 
    $a = 1;//(int); 
    $b = htmlspecialchars($a); 
    var_dump($b); // integer"1" 

感謝您的時間。

+2

'用htmlspecialchars()'似乎對整數 –

+0

無用的,如果你只是想檢查,如果它是一個號INT /浮充使用is_numeric()來 – Dave

回答

2
$a = 1;//(int); 
$b = htmlspecialchars($a); 
settype($b,gettype($a)); 
var_dump($b); // integer"1" 

結果

int(1) 
+0

是,但我不'噸知道(整數只是爲$類型一個例子)。但是想想看,我可以先獲得$ a的類型然後用它來投射它,但我認爲這是太多的工作,讓htmlspecialchars/hmmlenteties工作僅消毒字符串。感謝 我越想越想得出結論,檢查它是否是字符串,只有使用這些函數纔是最好的方法。 – gprusiiski

+1

我用另一個解決方案編輯了我的文章(感謝您的想法)。似乎工作。 – Drumbeg

+0

+1,爲解決方案。 –

0

您可以按類型先檢查,然後用htmlspecialchars再投的類型......儘管這違背了使用htmlspecial字符的。另外,我認爲$a可能來自某個請求變量,在這種情況下它總是一個字符串。

它幾乎聽起來像你想要一個函數來爲你確定上下文。因爲如果它已經鍵入int,你想要做什麼'逃避'?

0

沒有必要對整數值使用htmlspecialchars。

我只是得到了類型,並做了類似於我在下面的代碼中顯示的內容,甚至可以稍後再次設置類型。

$var_type = gettype($var); 

switch ($var_type) 
{ 
    case 'integer': 
     break; 
    case 'string': 
     $var = htmlspecialchars($var); 
} 

return $var;