鍍金池/ 問答/PHP  HTML/ 通過ajax將json對象傳給php后臺,為什么json字符.會被自動替換為_

通過ajax將json對象傳給php后臺,為什么json字符.會被自動替換為_

clipboard.png
打印后臺返回的信息
clipboard.png

clipboard.png
有什么辦法能夠保留字符“dl.is_distribution”嗎

回答
編輯回答
巫婆

你得看看TP里面I函數(shù)是怎么處理的.

2018年5月12日 00:05
編輯回答
還吻

命名不規(guī)范吧

2017年9月11日 10:07
編輯回答
北城荒

官方文檔有說明這個現(xiàn)象:

變量名中的點和空格被轉(zhuǎn)換成下劃線。例如 <input name="a.b" /> 變成了 $_REQUEST["a_b"]。

原因是:

通常,PHP 不會改變傳遞給腳本中的變量名。然而應(yīng)該注意到點(句號)不是 PHP 變量名中的合法字符。

<?php $varname.ext;  /* 非法變量名 */ ?> 

這時,解析器看到是一個名為 $varname
的變量,后面跟著一個字符串連接運算符,后面跟著一個裸字符串(即沒有加引號的字符串,且不匹配任何已知的健名或保留字)'ext'。很明顯這不是想要的結(jié)果。
出于此原因,要注意 PHP 將會自動將變量名中的點替換成下劃線。

其實不止點,下面的都會被處理

chr(32) ( ) (space)
chr(46) (.) (dot)
chr(91) ([) (open square bracket)
chr(128) - chr(159) (various)

PHP 對于 web 環(huán)境做了很多處理,這些只是冰山一角,希望能給樓主和大家?guī)韼椭?/p>

順便說下,用點分隔變量名,是不是不太符合工程命名規(guī)范?駝峰、下劃線都可以呀。

2017年1月7日 07:20
編輯回答
冷溫柔

請參考PHP官方手冊:來自PHP之外的變量

其中有一個NOTE這樣寫道:

Note:
變量名中的點和空格被轉(zhuǎn)換成下劃線。例如 <input name="a.b" /> 變成了 $_REQUEST["a_b"]。

但是具體原因沒有多加說明,我自己的理解是這樣的:
PHP對于外來的$_REQUEST變量有一個配置項:register_globals = on,作用是讓PHP將外來全局變量自動注冊為變量,如下:

// 如果 PHP 指令 register_globals = on 時可用
echo $username;  // 可以直接獲取post來的username變量
echo $_REQUEST['username']

于是,為了防止在register_globals = on模式下獲取注冊到類似$xxx.xxx這樣錯誤的變量格式,所以將空格和點號轉(zhuǎn)為了下劃線

2017年11月22日 16:03