@ BRC çözümü olduğundan severely limited in functionality, ben de diziler idare edebilmek ve tam olarak diğer uygulamaları (Raylar / Django) gibi davranır mayın, yayınlamak için gidiyorum. Bu a.b[1 2][2.x]=5
gibi tüm köşe durumlarda, yönetir.
Özünde aynı talihsiz sıkan vardır (altçizgiye özel karakterleri çevirir) dışında hemen hemen tüm iş yapar PHP'nin parse_str()
function, var.
Bu nedenle, tüm birinci anahtarlar HEX kodlanır ve daha sonra çözülür. Bu şekilde, nokta, boşluk ve diğer özel karakterler are preserved. Bu harika bir fikir.
function fix(&$target, $source, $discard = true) {
if ($discard)
$target = array();
$source = preg_replace_callback(
'/(^|(?<=&))[^=[]+/',
function($key) { return bin2hex(urldecode($key[0])); },
$source
);
parse_str($source, $post);
foreach($post as $key => $val)
$target[ hex2bin($key) ] = $val;
}
Ve sonra size böyle bu işlevini çağırabilirsiniz:
fix($_POST, file_get_contents('php://input'));
fix($_GET, $_SERVER['QUERY_STRING']);
fix($_COOKIE, $_SERVER['HTTP_COOKIE']);
Çok eski / orijinal değerlerini korumak istiyorsanız false
için $discard
parametresini ayarlayabilirsiniz. Benim çözüm basitlik onayladı.