Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos,
Anos e anos programando e lendo fóruns e jamais tive que criar um tópico (até hoje) para tentar resolver um problema.
Mas desta vez não tenho a mínima idéia de como resolver, olhem meu problema:
Eu passo uma variável para a URL que deve ser recebida por uma pagina PHP.
Para passar a variavel, depois de muita procura, descobri que a melhor forma de passar strings sem dar problema com o mod_rewrite do apache é aplicar o urlencode duas vezes exemplo:
<a href="pagina.php&scene=<?php echo urlencode(urlencode("teste")); ?>">link</a>
Tudo até ai está ok. Os valores são recebidos normalmente pela pagina PHP usando:
echo $_REQUEST["scene"]; //Resultado: teste
Caso eu utilize caracteres especiais os exemplos continuam corretamente olhem só os resultados de uma teste que fiz sem passar nada pelo GET (url), apenas um script de teste local:
$valor = 'teste$#';
echo $valor; // Retorna: teste$#
echo urlencode($valor); // Retorna: teste%24%23
echo $url = urlencode(urlencode($valor)); // Retorna: teste%2524%2523
echo urldecode($url); // Retorna: teste%24%23
echo urldecode(urldecode($url)); // Retorna: teste$#
Como podemos ver o string é codificado e decodificado sem erros dentro de um script PHP.
Agora o problema:
Caso eu utilize acentos como neste exemplo:
$valor = 'téste';
echo $url = urlencode(urlencode($valor)); // Retorna: t%25C3%25A9ste
echo urldecode(urldecode($url)); // Retorna: téste
Tudo ok dentro de um script de teste!
Mas, caso eu passe esta variavel para uma URL:
<a href="pagina.php&scene=t%25C3%25A9ste">link</a>
Ao receber o valor numa pagina PHP ela vem com erros, vejam:
echo mb_detect_encoding($_REQUEST["scene"]); // Retorna: UTF-8 (só para verificar se é UTF-8 mesmo)
echo $_REQUEST["scene"]; // Retorna: t?ste
Será que deu pra entender?
Depois que passo o valor codificado por uma URL através de um GET e recebo este valor, o valor vem com um erro de CHARSET
com um ponto de "?" (interrogação) onde deveria vir uma letra acentuada "é".
É como se o navegador estivesse decodificando o valor "t%25C3%25A9ste" de forma errada, sendo que quero que venha acentos e ele só me traz pontos de interrogação.
Não posso usar esta variável para fazer uma busca no banco de dados pois o MYSQL entende que "t?ste" é diferente de "téste"
>
Um detalhe importante:
Quando eu passo o valor
<a href="pagina.php&scene=t%25C3%25A9ste">link</a>
O retorno já vem decodificado pelo browser:
echo $_REQUEST["scene"]; // Retorna: t?ste
Eu nunca utilizei a função de decodificação porque não era necessário:
echo urldecode(urldecode($_REQUEST["scene"]));
Não tenho a mínima idéia do porque desta letra acentuada vir assim sem tradução.
Todos os browsers dão o mesmo erro.
Qualquer ajuda de quem entende de charset no PHP será extremamente bem vinda.
Coisas que já tentei:
<?php
header('Content-Type: text/html; charset=utf-8');
ini_set('default_charset','UTF-8');
?>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
</head>
(Colocados no início da página que recebe o GET)Carregando comentários...