Com a função PHP urlencode_deep() você codifica os valores de um array para serem utilizados em uma URL.

<?php
$argumentos = array(
	"cidade" => "São José dos Pinhais",
	"estado" => "Paraná",
	"caracteres" => "ã %s & !"
);

$argumentos_codificados = urlencode_deep( $argumentos );Code language: PHP (php)

O resultado da variável $argumentos_url será:

Array(
    "cidade" => "S%C3%A3o+Jos%C3%A9+dos+Pinhais"
    "estado" => "Paran%C3%A1"
    "caracteres" => "%C3%A3+%25s+%26+%21"
)Code language: PHP (php)

Codificando valores dinâmicos dos argumentos da URL de uma requisição a REST API do WordPress com a função urlencode_deep()

Utilizando como base o código prático da função PHP build_query() da última dica, adicionei as variáveis $itens e $busca, onde não é possível afirmar se elas já estarão em um formato válido para argumentos da URL. Isto normalmente acontece quando estamos recebendo esses valores de um usuário, através de um formulário de configuração. Segue abaixo o código do exemplo, já alterado para este cenário:

<?php
$argumentos = array(
	"orderby"	=> "date",
	"order"		=> "asc",
	"per_page"	=> $itens,
	"search"	=> $busca
);

// Codifica os valores para serem utilizados em uma URL
$argumentos_codificados = urlencode_deep( $argumentos );

$argumentos_url = build_query( $argumentos_codificados );

$url = get_rest_url(null, 'wp/v2/posts/?' . $argumentos_url);
Code language: PHP (php)

É importante salientar que a função PHP urlencode_deep() codifica apenas os valores de um array, as chaves não são codificadas. Se você precisar codificar ambos para serem utilizados em uma URL e não precisar se preocupar com compatibilidade com versões mais antigas do PHP, recomendo função http_build_query() nativa do PHP pois ela irá sanitizar tanto as chaves como os valores:

<?php
$argumentos = array(
	"orderby"	=> "date",
	"order"		=> "asc",
	"per_page"	=> $itens,
	$parametro	=> $parametro_valor
);

$argumentos_url = http_build_query( $argumentos_codificados );

$url = get_rest_url(null, 'wp/v2/posts/?' . $argumentos_url);
Code language: PHP (php)


Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *