2015-02-09 85 views
0

用戶可以將文件上傳到我的網站。URL中的非法字符

我已經檢查了堆棧溢出並查找了有關非法URL地址的各種討論。

當用戶上傳文件時,我希望刪除任何非法字符,有些網站建議使用FILTER_SANITIZE_URL,而其他網站則建議使用正則表達式。

我的問題是,最好的辦法是什麼?

+0

從什麼中刪除非法字符? – 2015-02-09 11:09:31

+0

他們都很好。使用最簡單的方法。 – Daan 2015-02-09 11:09:50

+0

用戶可能在其上傳的文件中包含非法字符的文件(文件名保持不變)。其他用戶可以在網站上訪問它。如果它包含非法字符它不會工作。 – panthro 2015-02-09 11:10:29

回答

1

PHP內置了FILTER_SANITIZE_URL。通常認爲使用內置函數(可用時)是最佳實踐,而不是試圖自己重新實現它們。

如果在保存文件名前對文件名執行此功能,則在URL中顯示它們時應該沒有問題。

E.g. $filename = filter_var($_FILES['name'], FILTER_SANITIZE_URL);

+0

我試過這個,但不幸的是,它仍然允許非法字符,如#和< – panthro 2015-02-09 12:09:29

+0

@panthro從PHP [文檔](http://''除去字母,數字和$ -_。+!*'(),{} | \\ ^〜[] \]#%「; /?:@&='這是因爲這些字符不是非法的,並且被允許在一個URL中,如果你想完全定義一個URL允許的內容,請閱讀這個:[RFC3986](http: /www.ietf.org/rfc/rfc3986.txt) – 2015-02-09 13:04:19

+0

@panthro如果你想消除不合法的特定字符,我會建議首先運行'FILTER_SANITIZE_URL'去除非法字符,然後使用正則表達式來刪除/替換您不希望在您的網址中添加其他字符。 – 2015-02-09 13:14:27