2016-01-22 61 views
1

這裏我很困惑,爲什麼FILTER_SANITIZE_URLvar_dump返回一個錯誤的字符串長度,並沒有刪除標籤,如。這發生在所有filter_var預定義的過濾器常量中。這是一個錯誤還是背後有邏輯?var_dump filter_var FILTER_SANITIZE_URL返回行爲

我使用PHP 5.4,因爲我必須,我們的服務器上運行它。讓我示範。 我有這個網址:

$url = 'http://www.example.com/index.php?a=1&b=2&c=3&d=some%20string'; 

,如果我清理它和的var_dump它:

var_dump(filter_var($url, FILTER_SANITIZE_URL)); 

則回覆:

string(60) "http://www.example.com/index.php?a=1&b=2&c=3&d=some%20string" 

現在如果我把惡意代碼URL

$url = 'http://www.example.com/index.php? 
<script> 
function myFunction() { 
    var x = "<?php echo $var; ?>"; 
    alert(x); 

} 
</script>a=1&b=2&c=3&d=some%20string'; 

s AME代碼:var_dump(filter_var($url, FILTER_SANITIZE_URL)); 將返回此:

string(132) "http://www.example.com/index.php?a=1&b=2&c=3&d=some%20string" 

注重類型和返回變種的長度。比前面多了72個字符,但顯然字符串仍然是60個字符。爲什麼var_dump或filter_var有這樣的行爲?如果它是一個錯誤,這已被修復。當我記錄這些類型的數據時,我需要這個函數來返回確切數量的字符。

+0

FILTER_SANITIZE_URL移除所有不必要的字符從URL,包括空格,如果u檢查視圖源它顯示 devpro

+0

@devpro ...我知道...但爲什麼它仍然返回var_dump上的132個字符? –

+0

因爲