鍍金池/ 問答/PHP  HTML/ 通過ajax將json對象傳給php后臺(tái),為什么json字符.會(huì)被自動(dòng)替換為_

通過ajax將json對象傳給php后臺(tái),為什么json字符.會(huì)被自動(dòng)替換為_

clipboard.png
打印后臺(tái)返回的信息
clipboard.png

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

回答
編輯回答
巫婆

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

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

命名不規(guī)范吧

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

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

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

原因是:

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

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

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

其實(shí)不止點(diǎn),下面的都會(huì)被處理

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

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

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

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

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

其中有一個(gè)NOTE這樣寫道:

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

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

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

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

2017年11月22日 16:03