您可以閱讀使用像自己的POST數據:
$formData = file_get_contents('php://input');
然而,解析了「應用程序/ x-WWW的形式,進行了urlencoded」,你要找到一個第三方庫因爲所有本地PHP選項都會顯示相同的行爲(後來的鍵會覆蓋較早的鍵),您可以使用普通的$ _POST結構找到它們。
下面是一個parse_str()用戶地版本的「玩具」實現,其中'重複'值被轉換爲數組。我並沒有權利要求該代碼的質量來處理「應用程序/ x-WWW的形式,進行了urlencoded」數據的所有可能的邊緣情況:
<?php
$form = file_get_contents('php://input');
$arg_sep = ini_get('arg_separator.input');
$max = ini_get('max_input_vars');
$token = strtok($form, $arg_sep);
$data = [];
while (false !== $token && $processed < $max) {
if (false !== ($pos = strpos($token, '='))) {
list($key, $value) = explode('=', $token);
$value = urldecode($value);
if (strlen($key)) {
if (isset($data[$key])) {
if (is_array($data[$key])) {
array_push($data[$key], $value);
} else {
$data[$key] = [$data[$key], $value];
}
} else {
$data[$key] = $value;
}
}
}
$token = strtok($arg_sep);
++$processed;
}
var_dump($data);
爲了便於比較,這裏是PHP的內部膽量實現 - 請注意,除此之外還有更多,但這是鍵/值解析邏輯的核心:
switch (arg) {
case PARSE_GET:
case PARSE_STRING:
separator = (char *) estrdup(PG(arg_separator).input);
break;
case PARSE_COOKIE:
separator = ";\0";
break;
}
var = php_strtok_r(res, separator, &strtok_buf);
while (var) {
val = strchr(var, '=');
if (arg == PARSE_COOKIE) {
/* Remove leading spaces from cookie names, needed for multi-cookie header where ; can be followed by a space */
while (isspace(*var)) {
var++;
}
if (var == val || *var == '\0') {
goto next_cookie;
}
}
if (++count > PG(max_input_vars)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Input variables exceeded " ZEND_LONG_FMT ". To increase the limit change max_input_vars in php.ini.", PG(max_input_vars));
break;
}
if (val) { /* have a value */
size_t val_len;
size_t new_val_len;
*val++ = '\0';
php_url_decode(var, strlen(var));
val_len = php_url_decode(val, strlen(val));
val = estrndup(val, val_len);
if (sapi_module.input_filter(arg, var, &val, val_len, &new_val_len TSRMLS_CC)) {
php_register_variable_safe(var, val, new_val_len, &array TSRMLS_CC);
}
efree(val);
} else {
size_t val_len;
size_t new_val_len;
php_url_decode(var, strlen(var));
val_len = 0;
val = estrndup("", val_len);
if (sapi_module.input_filter(arg, var, &val, val_len, &new_val_len TSRMLS_CC)) {
php_register_variable_safe(var, val, new_val_len, &array TSRMLS_CC);
}
efree(val);
}
next_cookie:
var = php_strtok_r(NULL, separator, &strtok_buf);
}
爲什麼你不能給他們不同的名字? – danmullen 2014-10-27 22:20:23
等號意味着,這些複選框是「鏈接」的。如果您使用收音機而不是複選框,則尤其如此。無論如何,我沒有看到任何爲什麼你應該避免這樣的名字。 – DarkSide 2014-10-27 22:21:58
使用Unbounce,我不能改變他們的名字是唯一的。 – 2014-10-27 22:26:05