2012-10-30 81 views
-2

這不起作用。當我在表單中輸入html時。例如,當我輸入水平線時,即使$ value是通過strip_tags傳遞的,它也會顯示在echo輸出中。

function sanitizeString($var){ 
    $var = strip_tags($var); 
    $var = htmlentities($var); 
    return stripslashes($var); 
} 

foreach($_POST as $key => $value){ 
    echo $key."<br>"; 
    sanitizeString($value); 
    echo $value."<br>"; 
} 

回答

2

你實際上並沒有改變$value。你正在拋棄返回值。嘗試$value = sanitizeString($value);

+0

或者簡寫'echo sanitizeString($ value);' – 2012-10-30 23:28:30

+0

這樣做了。我無法相信這個論壇有多快的迴應。我試圖接受你的答案,但一個橙色的盒子告訴我,我必須等待9分鐘。 – jimeast

0

您可以嘗試

$_POST = array_map(function ($var) { 
    return stripslashes(htmlentities(strip_tags($var))); 
}, $_POST); 


foreach ($_POST as $key => $value) { 
    echo "$key = $value <br>"; 
} 

或更好的窗臺使用filter_var

$_POST = array_map(function ($var) { 
    return filter_var($var, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW); 
}, $_POST); 

差異

$var = "index.php?name=guest<script>alert('attacked')</script>"; 
var_dump(stripslashes(htmlentities(strip_tags($var)))); 
var_dump(filter_var($var, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW)); 

輸出

string 'index.php?name=guestalert('attacked')' (length=37) 
string 'index.php?name=guestalert(&#39;attacked&#39;)' (length=45)