it-swarm.dev

Decodificação de URL em PHP

Eu estou tentando decodificar esta string de URL usando a função urldecode do PHP:

urldecode("Ant%C3%B4nio+Carlos+Jobim");

Isto é suposto a saída ...

'Antônio Carlos Jobim'

... mas, em vez disso, está descartando isso

'Antônio Carlos Jobim'

Eu testei a string em um decodificador online baseado em JS com grande sucesso, mas não consigo fazer esse lado do servidor de operação. Alguma ideia?

31
Brandon Jackson

Sua string é codificada também UTF-8. Isso vai funcionar:

echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim"));

Saída: "Antônio Carlos Jobim".

60
Kristoffer Bohmann

Na verdade, você obtém a saída desejada, mas não é interpretada como UTF-8. Se isso estiver em um aplicativo HTTP, você deve enviar um cabeçalho ou uma meta tag (ou ambos) que diria ao cliente para usar o UTF-8.

Editar: por exemplo:

// replace text/html with the content type you're using
header('Content-Type: text/html; charset=UTF-8');
13
Ignas R

quando eu faço

<?php
echo urldecode("Ant%C3%B4nio+Carlos+Jobim");
?>

Sua exibição corretamente no meu navegador como

Antônio Carlos Jobim

Eu testei com o XAMPP

2
YOU

Você também está usando htmlenteties antes de fazer um eco para a página? Quando acabei de testar seu código, funcionou bem com apenas a parte urldecode("Ant%C3%B4nio+Carlos+Jobim");, mas quando eu o executei através de htmlentities, obtive a mesma saída que você.

Parece ser um problema com os caracteres UTF-8 e como PHP lida com a função htmlentities

1
Doug Neiner

outra opção é:

<?php
$smthing = 'http%3A%2F%2Fmysite.com';
$smthing = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($smthing)); 
$smthing = html_entity_decode($smthing,null,'UTF-8');
echo $smthing;
?>

a saída torna-se: http://mysite.com

0
T.Todua