2013-12-11 5 views
0

데이터 살균에 문제가 있습니다.랜덤 데이터 유형 살생

htmlspecialchars/htmlenteties와 같은 데이터를 삭제할 PHP 함수가 내장되어 있습니다. 문자열이 아닌 값이 제공된 경우 원래 형식을 유지합니다. 예 :

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" 

감사합니다.

int(1) 
+2

'반드시 htmlspecialchars()는 단지의 경우 숫자 INT/플로트를 사용 각각 is_numeric() –

+0

에 쓸모없는 것 예). 하지만 그것에 대해 생각해 보니, 먼저 $ a 유형을 가져 와서 그것을 캐스팅하는 데 사용할 수 있습니다. 그러나 이것은 너무 많은 작업으로, htmlspecialchars/htmlenteties를 string 만 살균으로 작업하는 것으로 생각합니다. 덕분에 더 생각해 봅니다. 결론은 문자열인지 확인한 다음 그 함수를 사용하는 것이 가장 좋은 방법이라는 것입니다. – Dave

답변

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

결과 그런 다음 htmlspecialchars을 사용하여 다음 형식으로 캐스팅 ... 그 htmlspecial 문자의 사용을 무시하는 것이지만, 첫 번째 유형으로 확인할 수 있습니다. 또한, 나는 아마도 $a이 항상 그 경우에는 문자열이 될 일부 요청 변수에서 올 것이라고 생각합니다.

마치 당신이 문맥을 결정하기를 원하는 것처럼 들리 네요. 이미 int 타입으로 입력되었으므로, 무엇을 '탈출'할까요?

+0

예를 확인하고자하지만 난이 (정수 단지했다 $의 유형을 모르겠어요 경우'정수 – gprusiiski

+1

다른 솔루션으로 내 게시물을 편집했습니다 (아이디어 덕분에). 일하는 것 같습니다. 솔루션의 경우 – Drumbeg

+0

+1. –

0

에서

0

정수 값에 htmlspecialchars를 사용할 필요가 없습니다.

방금 ​​형식을 가져 와서 아래 코드에 표시되는 것과 같은 작업을 수행합니다. 나중에 다시 설정할 수도 있습니다.

$var_type = gettype($var); 

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

return $var;