Если вы пишете небольшой скрипт, вы можете спросить PHP, что он предпочитает:
<code><?php
$c = 0;
$data = array(
"a" => array(
"b[]" => $c
)
);
echo "<pre>";
var_export($data);
echo "\r\na[b[]]=c Encoded: " . urlencode("a[b[]]=c");
echo "
";
?>
Результаты
array (
'a' =>
array (
'b[]' => 0,
),
)
a[b[]]=c Encoded: a%5Bb%5B%5D%5D%3Dc
Обновление
Я написал следующий код, чтобы посмотреть, как его кодирует браузер:
<html>
<head>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script>
$(function(){
$("form").submit(function(e){
e.preventDefault();
var data = $(this).serialize();
console.log(data);
});
});
</script>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
<label for "a">a[b[]] = </label>
<input type="text" name="a[b[]]" id="a" value="c" />
<br />
<button type="submit">
Go
</button>
</form>
</body>
</html>
Когда я нажимаю Go
, я вижу в консоли следующее:
a%5Bb%5B%5D%5D=c
Когда я запускаю его через urldecode()
:
<?php
echo urldecode("a%5Bb%5B%5D%5D=c");
?>
Я вижу следующие результаты:
a[b[]]=c
Похоже, вам не нужно кодировать символ =
, но вы хотите правильно кодировать [
и ]
: %5B
и %5D
соответственно.
Итак, если вы хотите использовать:
index.php?a[b[]]=c
Я бы посоветовал:
index.php?a%5Bb%5B%5D%5D=c
Надеюсь, это поможет.