
- PHP 教程
- PHP - 首頁
- PHP - 簡介
- PHP - 安裝
- PHP - 歷史
- PHP - 特性
- PHP - 語法
- PHP - Hello World
- PHP - 註釋
- PHP - 變數
- PHP - Echo/Print
- PHP - var_dump
- PHP - $ 和 $$ 變數
- PHP - 常量
- PHP - 魔術常量
- PHP - 資料型別
- PHP - 型別轉換
- PHP - 型別混合
- PHP - 字串
- PHP - 布林值
- PHP - 整數
- PHP - 檔案與 I/O
- PHP - 數學函式
- PHP - Heredoc & Nowdoc
- PHP - 複合型別
- PHP - 檔案包含
- PHP - 日期與時間
- PHP - 標量型別宣告
- PHP - 返回型別宣告
- PHP 運算子
- PHP - 運算子
- PHP - 算術運算子
- PHP - 比較運算子
- PHP - 邏輯運算子
- PHP - 賦值運算子
- PHP - 字串運算子
- PHP - 陣列運算子
- PHP - 條件運算子
- PHP - 展開運算子
- PHP - 空值合併運算子
- PHP - 比較運算子
- PHP 控制語句
- PHP - 決策
- PHP - If…Else 語句
- PHP - Switch 語句
- PHP - 迴圈型別
- PHP - For 迴圈
- PHP - Foreach 迴圈
- PHP - While 迴圈
- PHP - Do…While 迴圈
- PHP - Break 語句
- PHP - Continue 語句
- PHP 函式
- PHP - 函式
- PHP - 函式引數
- PHP - 按值傳遞
- PHP - 按引用傳遞
- PHP - 預設引數
- PHP - 具名引數
- PHP - 可變引數
- PHP - 返回值
- PHP - 傳遞函式
- PHP - 遞迴函式
- PHP - 型別提示
- PHP - 變數作用域
- PHP - 嚴格型別
- PHP - 匿名函式
- PHP - 箭頭函式
- PHP - 可變函式
- PHP - 區域性變數
- PHP - 全域性變數
- PHP 超全域性變數
- PHP - 超全域性變數
- PHP - $GLOBALS
- PHP - $_SERVER
- PHP - $_REQUEST
- PHP - $_POST
- PHP - $_GET
- PHP - $_FILES
- PHP - $_ENV
- PHP - $_COOKIE
- PHP - $_SESSION
- PHP 檔案處理
- PHP - 檔案處理
- PHP - 開啟檔案
- PHP - 讀取檔案
- PHP - 寫入檔案
- PHP - 檔案是否存在
- PHP - 下載檔案
- PHP - 複製檔案
- PHP - 追加檔案
- PHP - 刪除檔案
- PHP - 處理 CSV 檔案
- PHP - 檔案許可權
- PHP - 建立目錄
- PHP - 列出檔案
- 面向物件 PHP
- PHP - 面向物件程式設計
- PHP - 類和物件
- PHP - 建構函式和解構函式
- PHP - 訪問修飾符
- PHP - 繼承
- PHP - 類常量
- PHP - 抽象類
- PHP - 介面
- PHP - 特性
- PHP - 靜態方法
- PHP - 靜態屬性
- PHP - 名稱空間
- PHP - 物件迭代
- PHP - 封裝
- PHP - Final 關鍵字
- PHP - 過載
- PHP - 克隆物件
- PHP - 匿名類
- PHP Web 開發
- PHP - Web 概念
- PHP - 表單處理
- PHP - 表單驗證
- PHP - 表單郵件/URL
- PHP - 完整表單
- PHP - 檔案包含
- PHP - GET & POST
- PHP - 檔案上傳
- PHP - Cookies
- PHP - Sessions
- PHP - Session 選項
- PHP - 傳送郵件
- PHP - 輸入資料過濾
- PHP - Post-Redirect-Get (PRG)
- PHP - 快閃記憶體訊息
- PHP 高階
- PHP - MySQL
- PHP.INI 檔案配置
- PHP - 陣列解構
- PHP - 編碼規範
- PHP - 正則表示式
- PHP - 錯誤處理
- PHP - Try…Catch
- PHP - Bug 除錯
- PHP - 針對 C 開發人員
- PHP - 針對 PERL 開發人員
- PHP - 框架
- PHP - Core PHP 與框架
- PHP - 設計模式
- PHP - 過濾器
- PHP - JSON
- PHP - 異常
- PHP - 特殊型別
- PHP - 雜湊
- PHP - 加密
- PHP - is_null() 函式
- PHP - 系統呼叫
- PHP - HTTP 認證
- PHP - 交換變數
- PHP - Closure::call()
- PHP - 過濾後的 unserialize()
- PHP - IntlChar
- PHP - CSPRNG
- PHP - 預期
- PHP - Use 語句
- PHP - 整數除法
- PHP - 已棄用的特性
- PHP - 已移除的擴充套件和 SAPI
- PHP - PEAR
- PHP - CSRF
- PHP - FastCGI 程序
- PHP - PDO 擴充套件
- PHP - 內建函式
- PHP 有用資源
- PHP - 速查表
- PHP - 問答
- PHP - 快速指南
- PHP - 線上編譯器
- PHP - 有用資源
- PHP - 討論
PHP - 輸入資料過濾
在 PHP 中,確保輸入資料經過適當的過濾非常重要,在伺服器端程式碼處理資料之前,需移除任何不需要的字元。通常,使用者透過 HTML 表單將資料輸入到 PHP Web 應用程式中。如果表單資料包含任何不需要的字元,可能會造成危害,因此必須執行適當的清理操作。
可以使用 PHP 中的一個或多個以下函式進行輸入過濾。
htmlspecialchars() 函式
此函式將特殊字元轉換為 HTML 實體。
htmlspecialchars( string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ?string $encoding = null, bool $double_encode = true ): string
在 HTML 中,某些字元具有特殊含義。此 htmlspecialchars() 函式用於將特殊字元編碼為 HTML 實體。當您希望將使用者輸入顯示為 HTML 並希望防止指令碼注入攻擊時,這很有用。
以下特殊字元將按如下所示轉換:
字元 | 替換為 |
---|---|
& (和號) | & |
" (雙引號) | ", 除非設定了ENT_NOQUOTES |
' (單引號) | ' (對於ENT_HTML401) 或 ' (對於ENT_XML1, ENT_XHTML 或ENT_HTML5),但僅當設定了ENT_QUOTES 時 |
< (小於號) | < |
> (大於號) | > |
標誌常量
flags 引數是以下一個或多個標誌的位掩碼,這些標誌指定如何處理引號、無效程式碼單元序列和使用的文件型別。
序號 | 常量 & 描述 |
---|---|
1 | ENT_COMPAT 將轉換雙引號並保留單引號。 |
2 | ENT_QUOTES 將轉換雙引號和單引號。 |
3 | ENT_NOQUOTES 將保留雙引號和單引號。 |
4 | ENT_IGNORE 丟棄無效程式碼單元序列,而不是返回空字串。 |
5 | ENT_SUBSTITUTE 將無效程式碼單元序列替換為 Unicode 替換字元 U+FFFD (UTF-8) 或 �。 |
6 | ENT_DISALLOWED 將給定文件型別中無效的程式碼點替換為 Unicode 替換字元 U+FFFD (UTF-8) 或 � (否則),而不是保留它們。這可能很有用。 |
7 | ENT_HTML401 將程式碼處理為 HTML 4.01。 |
8 | ENT_XML1 將程式碼處理為 XML 1。 |
9 | ENT_XHTML 將程式碼處理為 XHTML。 |
10 | ENT_HTML5 將程式碼處理為 HTML 5。 |
示例
請檢視以下示例:
<?php $str = 'Welcome To "PHP Tutorial" by <b>TutorialsPoint</b>'; echo htmlspecialchars($str); ?>
它將產生以下輸出:
Welcome To "PHP Tutorial" by <b>TutorialsPoint</b>
strip_tags() 函式
strip_tags() 函式從給定字串中刪除所有 HTML 和 PHP 標記。
strip_tags(string $string, array|string|null $allowed_tags = null): string
當您希望確保使用者輸入不包含任何潛在的惡意標記時,此函式非常有用。
allowed_tags 引數是一個可選的第二個引數,用於指定不應去除的標記。它們要麼以字串形式給出,要麼以陣列形式給出。
示例
請檢視以下示例:
<?php $text = '<p>Hello World</p><!-- Comment --> <a href="/test.html">Click Here</a>'; echo strip_tags($text); echo "\n"; // Allow <p> and <a> echo strip_tags($text, '<p><a>'); ?>
它將產生以下輸出:
Hello World Click Here Hello World Click Here
addslashes() 函式
addslashes() 函式向字串新增反斜槓。
addslashes(string $string): string
該函式返回一個字串,在需要轉義的字元前新增反斜槓。這些字元是:
單引號 (')
雙引號 (")
反斜槓 (\)
NUL (空位元組)
當您將使用者輸入儲存到資料庫中並希望防止 SQL 注入攻擊時,請使用此函式。
示例
請檢視以下示例:
<?php $text = "Newton's Laws"; $str = addslashes($text); // prints the escaped string echo($str); ?>
它將產生以下輸出:
Newton\'s Laws
filter_var() 函式
藉助特定的過濾器標誌,您可以使用 filter_var() 函式過濾使用者輸入。
filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed
$value 引數是一個需要過濾其值的變數。$filter 引數是任何預定義的過濾器常量。
序號 | ID & 描述 | |
---|---|---|
1 | FILTER_SANITIZE_EMAIL 刪除除字母、數字和 !#$%&'*+-=?^_`{|}~@.[]. 之外的所有字元。 |
|
2 | FILTER_SANITIZE_ENCODED URL 編碼字串,可選地去除或編碼特殊字元。 |
|
3 | FILTER_SANITIZE_ADD_SLASHES 應用 addslashes()。(從 PHP 7.3.0 開始可用)。 |
|
4 | FILTER_SANITIZE_NUMBER_FLOAT 刪除除數字、+- 和可選的 .,eE 之外的所有字元。 |
|
5 | FILTER_SANITIZE_NUMBER_INT 刪除除數字、加號和減號之外的所有字元。 |
|
6 | FILTER_SANITIZE_SPECIAL_CHARS HTML 編碼 '"<>& 和 ASCII 值小於 32 的字元,可選地去除或編碼其他特殊字元。 |
|
7 | FILTER_SANITIZE_FULL_SPECIAL_CHARS 等效於呼叫 htmlspecialchars() 並設定ENT_QUOTES。可以透過設定FILTER_FLAG_NO_ENCODE_QUOTES 來停用編碼引號。 | |
8 | FILTER_SANITIZE_URL 刪除除字母、數字和 $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=. |
|
9 | FILTER_UNSAFE_RAW |
示例
以下程式碼展示瞭如何過濾電子郵件資料:
<?php $a = 'abc def@xyz.com'; $sa = filter_var($a, FILTER_SANITIZE_EMAIL); echo "$sa"; ?>
它將產生以下輸出:
abcdef@xyz.com
示例
以下程式碼展示瞭如何過濾 URL:
<?php $a = "http://example.c o m"; $sa = filter_var($a, FILTER_SANITIZE_URL); echo "$sa"; ?>
它將產生以下輸出:
http://example.com