Como usar parse_str em PHP

2 de novembro de 2021 Off Por sudoroot

Neste artigo, exploraremos a parse_strfunção em PHP. É usado para converter uma string de consulta de solicitação GET em variáveis ​​utilizáveis.

No desenvolvimento diário de PHP, você geralmente precisa lidar com strings de consulta – a maneira como os dados são passados ​​para o seu script na URL em uma solicitação GET. Quando uma string de consulta é passada na URL, o PHP fornece a variável superglobal$_GET contendo todos os parâmetros de consulta como variáveis ​​PHP, para que você possa ler facilmente os parâmetros disponíveis na string de consulta. No entanto, às vezes você precisa processar uma string de consulta bruta e convertê-la em variáveis.

No PHP, existem algumas maneiras diferentes de fazer isso. Você pode usar a explodefunção para dividir a string de consulta pelo &caractere e, em seguida, novamente pelo =caractere. Mas há uma maneira ainda mais fácil: o PHP fornece a parse_strfunção, que permite analisar a string de consulta em uma única chamada.

Hoje, vamos discutir a parse_strfunção em detalhes junto com alguns exemplos do mundo real.

Sintaxe: a parse_strfunção

Vamos dar uma olhada na sintaxe da parse_strfunção:

1
parse_str(string $string, array &$result): void

Como você pode ver, parse_strleva dois argumentos. O primeiro argumento é a string de entrada e espera-se que esteja no formato de string de consulta : por exemplo. name=wilson&color=blue

O segundo argumento é uma matriz que será preenchida pelas variáveis ​​analisadas da string de consulta.

É importante notar que a parse_strfunção não retorna nada, então você deve usar o segundo argumento para inicializar o resultado desta função. Até o PHP 7.2, o segundo argumento era opcional, e sua omissão dizia parse_strpara retornar os valores de resultado como variáveis ​​no escopo local, mas a partir do PHP 7.2 este é um argumento obrigatório.

Além disso, a parse_strfunção sempre decodifica variáveis ​​codificadas por URL, portanto, você não precisa usar a urldecodefunção . Além disso, se você tiver uma string de consulta de entrada muito longa, pode gerar o input variables exceeded Xerro. Nesse caso, verifique o max_input_varsvalor de configuração em seu arquivo de configuração php.ini e ajuste-o de acordo com seus requisitos.

Vejamos alguns exemplos do mundo real na próxima seção.

Exemplos do mundo real de parse_str

Nesta seção, veremos alguns exemplos do mundo real para demonstrar como usar a parse_strfunção.

 

Um exemplo simples

Vamos começar com um exemplo simples, conforme mostrado no trecho a seguir.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<?php
$string = 'first_name=John&last_name=Richards&age=30';
parse_str($string, $result);
print_r($result);
/**
Output:
Array
(
    [first_name] => John
    [last_name] => Richards
    [age] => 30
)
**/

Como você pode ver, a parse_strfunção analisa a $stringstring de consulta e $resulté preenchida com uma matriz. Os nomes das variáveis ​​são convertidos em chaves de array e os valores das variáveis ​​são atribuídos às chaves de array correspondentes.

Exemplo com uma matriz

Freqüentemente, a string de consulta de entrada pode conter variáveis ​​de matriz, e a parse_strfunção pode detectá-la e convertê-la nas variáveis ​​de matriz correspondentes.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<?php
$string = 'foo=1&bar[]=1&bar[]=2';
parse_str($string, $result);
print_r($result);
/**
$result Output:
Array
(
    [foo] => 1
    [bar] => Array
        (
            [0] => 1
            [1] => 2
        )
)
**/

Como você pode ver no exemplo acima, a barvariável contém vários valores na string de consulta de entrada e é convertida na $result['bar']matriz correspondente, conforme mostrado na saída.

Tenha cuidado, se você não usar a []sintaxe especial após variáveis ​​de array, parse_strirá tratá-la como uma variável regular e manterá apenas o último valor na string. Isso funciona de maneira um pouco diferente para a maioria dos analisadores de string de consulta.

Exemplo com caracteres especiais

Às vezes, a string de consulta de entrada contém espaços e pontos como parte dos nomes das variáveis. No entanto, o PHP não permite espaços e pontos em nomes de variáveis ​​e, portanto, eles são automaticamente convertidos em sublinhados pela parse_strfunção.

Vamos dar uma olhada no exemplo a seguir para entender como funciona.

01
02
03
04
05
06
07
08
09
10
11
12
<?php
$string = 'my name=John&[email protected]';
parse_str($string, $result);
print_r($result);
/**
$result Output:
Array
(
    [my_name] => John
    [my_email] => [email protected]
)
**/

Se você notou, os caracteres de espaço e ponto nas variáveis ​​de string de consulta de entrada são substituídos pelo caractere sublinhado ( _) nas chaves de array.

Exemplo com valores codificados por URL

Como discutimos anteriormente, a parse_strfunção sempre decodifica valores codificados por URL durante a análise. Isso significa que você não precisa aplicar a urldecodefunção separadamente .

Aqui está um exemplo com alguns valores codificados por URL.

01
02
03
04
05
06
07
08
09
10
11
12
<?php
$string = 'name=John%20Richards&profile_url=http%3A%2F%2Fexample.com%2Fmyprofile';
parse_str($string, $result);
print_r($result);
/**
$result Output:
Array
(
    [name] => John Richards
    [profile_url] => https://example.com/myprofile
)
**/

Como você pode ver, os caracteres codificados por URL são convertidos automaticamente em seus caracteres correspondentes.

Conclusão

Hoje, discutimos a parse_strfunção em PHP que é útil para converter uma string de consulta em variáveis. Espero que seja útil em sua própria codificação PHP!