Variáveis ​​múltiplas em 1 em uma URL

Estou procurando por uma lista de argumentos transmitidos em uma URL.

$url['key1']=1; $url['key2']=2; $url['key3']=3; $url['key4']=4; $url['key5']=5; $url['key6']=6; $url['key7']=7; 

Por favor, note que estou tentando passar isso no URL na 1 variável GET. Eu sei que isso seria melhor feito por? Key1 = 1 & key2 = 2 & key3 = 3 … etc, mas por razões que são muito complicadas para tentar e explicar que não podem estar neste formato.

Alguma sugestão sobre como posso converter essa matriz em algo que pode ser passado como 1 get var em uma string de URL?

Desde já, obrigado.

   

    Experimente http_build_query :

     $url['key1']=1; $url['key2']=2; $url['key3']=3; $url['key4']=4; $url['key5']=5; $url['key6']=6; $url['key7']=7; echo http_build_query($url); //echos key1=1&key2=2&key3=3&key... 

    O que faz é converter uma matriz em uma seqüência de consulta usando as chaves e cuida automaticamente a codificação url.

    EDITAR :

    Basta ler seu requisito adicional de que ele deve ser apenas uma variável. Então, nunca mais receba essa resposta. Se o seu problema foi a codificação adequada, você pode querer dar essa outra tentativa.

    Espero que ajude.

    Você pode usar json_encode() ou serialize()

     $myUrl = 'http://www.example.com/?myKey=' . urlencode(json_encode($url)); 

    ou

     $myUrl = 'http://www.example.com/?myKey=' . urlencode(serialize($url)); 

    O uso de json_encode geralmente lhe dará uma string mais curta, mas a versão muito antiga do PHP pode não ter a function json_decode disponível para decodificá-la novamente.

    A maneira final seria criar sua própria codificação personalizada … poderia ser tão simples valores separados por pipe: chave1 | 1 | key2 | 2 | key3 | 3
    Isso lhe proporcionaria a melhor opção para um URL curto, mas é o melhor trabalho.

    A recomendação de usar serialize() está bem. Se o espaço for um problema, use uma combinação de bzcompress() e serialize() .

    No entanto, há uma segurança considerando que não foi levantada, e isso é que o usuário final (quem pode ver e editar esta url) pode manipular os dados dentro dela. Você pode pensar que é difícil, mas a maioria dos worms de ataque do PHP na natureza faz isso em algum grau ou outro.

    Se deixar o usuário manipular diretamente qualquer uma das chaves ou valores (ou substituí-lo por um inteiro, ou um object, ou qualquer outra coisa), então você deve proteger seu script (e seus usuários) desse ataque.

    Uma solução simples é simplesmente usar um segredo compartilhado. Pode ser qualquer coisa; desde que seja único e verdadeiramente secreto (talvez você deva gerá-lo aleatoriamente no momento da instalação). Digamos que você tenha no seu arquivo de configuração algo como isto:

     define('SECRET', 'unoqetbioqtnioqrntbioqt'); 

    Em seguida, você pode assinar digitalmente os dados serializados criados com: $s=serialize($m) usando $k=sha1($s.SECRET) e fazer o valor url $k.$s

    Então, antes de unserialize() faça isso:

     $v=substr($input,0,40); $s=substr($input,40); if ($v != sha1($s.SECRET)) { die("invalid input"); } $m=unserialize($s); 

    Desta forma, você sabe que $m é o mesmo que o valor original que você serializou.

    Se você quiser, você pode usar as seguintes substituições drop-in:

     define('SECRET','buh9tnb1094tib014'); // make sure you pick something else function secureserialize($o) { $s=serialize($o); return sha1($s.SECRET).$s; } function secureunserialize($i) { $v=substr($i,0,40);$s=substr($i,40); if ($v!=sha1($s.SECRET)){die("invalid input");} return unserialize($s); } 

    Você pode serialize los como pares de valores-chave ao construir o URL, colocando o valor serializado resultante em uma única variável $_GET (por exemplo, data=sfsdfasdf98sdfasdf ), unserialize a unserialize $_GET["data"] . Você precisará usar urlencode para garantir que os valores serializados resultantes sejam seguros por URL. Certifique-se de observar os limites máximos de URL – 2083 caracteres no IE .

    No entanto, a menos que você realmente não possa usar pares de valores-chave em URLs (por sua pergunta), key1=foo&key2=bar... definitivamente é o caminho a seguir.

    Se você não se importa de deixar cair os nomes das chaves, você pode usar

    http://example.com?url[]=1&url[]=2&url[]=3

    EDITAR Mantendo os nomes das teclas:

    http://example.com?values[]=1&values[]=2&values[]=3&keys[]=1&keys[]=2&keys[]=3

    Em seguida, em seu script PHP:

     $url = array_combine($_GET['keys'], $_GET['values']); 

    Você poderia resolver seu problema ao salvar os dados como um cookie HTML? Dessa forma, você não precisa modificar o URL.

    Se você conhece os valores com antecedência, você pode configurá-los do lado do servidor quando você envia ao usuário a página com seu link de destino.

    Se você não conhecer os valores até que o usuário preenche um formulário, ele ainda pode ser feito usando o JavascriptL. Quando o usuário clicar no formulário, você pode configurar vários cookies fazendo várias chamadas javascript como: document.cookie = ‘key1 = test; expira = Seg, 7 de setembro de 2009 23:47:11 UTC; caminho = / ‘

    O modelo de segurança pode dar-lhe alguns problemas, se você está tentando passar esses dados de um domínio para outro.