Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

PHP 將 HTTP POST field 的 . (dot) 改為 _ (underscore)

Posted on 2017 年 12 月 21 日2021 年 3 月 12 日 By 日落 在〈PHP 將 HTTP POST field 的 . (dot) 改為 _ (underscore)〉中尚無留言

今天遇到很奇怪的行為,在 PostMan 將 HTTP POST data 丟給 PHP 以後,參數名稱裡面有 . (dot) 的字元,全部都被改為 _ (underscore) 了。像是 field 名稱為「article.title」的欄位名稱,在 PHP 底下取值必須使用 $_POST[‘article_title’]。

原本以為 RFC 裡面有的定義 reserve word,但是找了半天找不到。最後原因是 PHP 為了支援 register_global,但是 PHP 變數名稱又不允許使用 . (dot) 當作名稱的一部分,最後就自動轉為 _ (underscore)。

這個行為不管有沒有啟動 register_global 都會出現,即使上了 PHP 7.2 都已經不支援了,這個行為仍然存在。

ref:

  • https://stackoverflow.com/a/3742678/8681141
  • PHP: Variables From External Sources – Manual


後來做了個簡單的測試,在 HTTP POST 依序送出二個 field data:

a.b=100&a_b=200

這時候再印出 $_POST:

var_dump($_POST);

array(1) {
  'a_b' =>
  string(3) "200"
}

所以後面的會打贏前面的 … (所以「世界上的戰爭沒任何人贏了,只有戰爭贏了」)

Tags:PHP

文章導覽

Previous Post: 火線獵殺 野境 之 終極戰士 (Predator)
Next Post: PHPStan 靜態分析工具

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.