2013-12-11 44 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;