首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

表單編碼類型詳解:multipart/form-data vs application/x-www-form-urlencoded

     編輯:PHP 相關知識

核心差異速查表

特性application/x-www-form-urlencoded (預設)multipart/form-data
適用場景一般文字表單、小量資料檔案上傳、大量文字、非 ASCII 字元、二進位資料
編碼方式URL 編碼(空格→+,特殊字元→%XX)多部分 MIME,各欄位獨立區塊,含 Content-Disposition
效率小資料高效大資料/二進位高效,無需 URL 編碼轉換
HTTP MethodGET/POST 皆可必須使用 POST
input typetext, hidden, select 等必須包含 type="file"
伺服器解析$_POST 自動填入$_FILES + $_POST,需啟用 multipart 解析

何時使用 multipart/form-data?

  • 表單包含 <input type="file"> 檔案上傳欄位
  • 提交大量文字內容(如富文本編輯器內容)
  • 資料含非 ASCII 字元(中文、日文、Emoji 等)
  • 需傳輸二進位資料(圖片、PDF、二進位 Blob)

HTML 表單寫法對比

一般表單(預設編碼)

<form action="submit.php" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <button type="submit">登入</button>
</form>

檔案上傳表單(必須指定 enctype)

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
    <input type="file" name="avatar" accept="image/*">
    <button type="submit">上傳頭像</button>
</form>

伺服器端處理差異

// application/x-www-form-urlencoded
$_POST['username']; // 直接取得

// multipart/form-data
$_POST['description'];        // 一般文字欄位
$_FILES['avatar']['tmp_name']; // 上傳檔案暫存路徑
$_FILES['avatar']['name'];     // 原始檔名
$_FILES['avatar']['type'];     // MIME 類型
$_FILES['avatar']['size'];     // 檔案大小
$_FILES['avatar']['error'];    // 錯誤代碼(0=成功)

常見錯誤與除錯

  1. 忘記加 enctype:導致 $_FILES 為空,上傳失敗
  2. 使用 GET 方法:multipart 僅支援 POST,GET 會截斷資料
  3. php.ini 限制:檢查 file_uploads=On、upload_max_filesize、post_max_size
  4. Nginx/Apache 客戶端上傳大小限制:需同步調整 client_max_body_size / LimitRequestBody
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved