Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mzaidan

Erro ao transmitir uma informação para a URL

Recommended Posts

Prezados, possuo um menu montado em PHP, a pessoa vai criando as categorias e ele vai sendo montado.

Acontece que, se eu montar uma categoria com acento, por exemplo "RELÓGIOS/", é transmitido para a URL REL%D3GIOS/

Ai da erro.

 

Alguém sabe como eu resolvo isso?

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que você consiga resolver o seu problema através de uma codificação do texto.

Se o meu charset estiver codificado para UTF-8 eu uso o utf8_decode e utf8_encode (isso dentro do php é claro).

Mas pode ser resolvido também direto no html codificando direto no texto. Como por exemplo: á passa a ficar á

Aqui vai um link para uma tabela com os acentos codificados: Tabela de acentos

Bom amigo creio que isto resolva o teu problema, se o utf-8 não resolver, o iso-8859-1 resolve (segunda forma de resolver que eu passei).

 

Espero ter ajudado em algo.

 

Gustavo Ribas Logullo - Desenvolvedor Web

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que você consiga resolver o seu problema através de uma codificação do texto.

Se o meu charset estiver codificado para UTF-8 eu uso o utf8_decode e utf8_encode (isso dentro do php é claro).

Mas pode ser resolvido também direto no html codificando direto no texto. Como por exemplo: á passa a ficar á

Aqui vai um link para uma tabela com os acentos codificados: Tabela de acentos

Bom amigo creio que isto resolva o teu problema, se o utf-8 não resolver, o iso-8859-1 resolve (segunda forma de resolver que eu passei).

 

Espero ter ajudado em algo.

 

Gustavo Ribas Logullo - Desenvolvedor Web

 

Opa amigo, obrigado pela ajuda, mas não entendi.

O que eu teria que fazer?

 

Desde já agradeço

 

O que eu tenho que fazer é o seguinte:

No menu está RELÓGIOS, eu tenho que passar para a URL RELOGIO (sem acento).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, bom dia cara. Agora entendi melhor qual o teu problema hehehe. Seguinte, vou lhe passar uma função para remover acentos.

function RetiraAcento($texto) 
{ 
 $array1 = array("á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç", "Á", "À", "Â", "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ó", "Ò", "Ô", "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç");
 $array2 = array("a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", "o", "o", "o", "o", "o", "u", "u", "u", "u", "c", "A", "A", "A", "A", "A", "E", "E", "E", "E", "I", "I", "I", "I", "O", "O", "O", "O", "O", "U", "U", "U", "U", "C");
 return str_replace($array1, $array2, $texto); 
}

Aí você chama a função assim:

 

RetiraAcento($variavel_com_texto_a_ser_removido_acento);

 

Espero ter sido claro.

 

Gustavo Ribas Logullo - Desenvolvedor Web

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, bom dia cara. Agora entendi melhor qual o teu problema hehehe. Seguinte, vou lhe passar uma função para remover acentos.

function RetiraAcento($texto) 
{ 
 $array1 = array("á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç", "Á", "À", "Â", "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ó", "Ò", "Ô", "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç");
 $array2 = array("a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", "o", "o", "o", "o", "o", "u", "u", "u", "u", "c", "A", "A", "A", "A", "A", "E", "E", "E", "E", "I", "I", "I", "I", "O", "O", "O", "O", "O", "U", "U", "U", "U", "C");
 return str_replace($array1, $array2, $texto); 
}

Aí você chama a função assim:

 

RetiraAcento($variavel_com_texto_a_ser_removido_acento);

 

Espero ter sido claro.

 

Gustavo Ribas Logullo - Desenvolvedor Web

 

Vou testar aqui, mas esqueci de dizer o seguinte:

 

O menu tem que ficar com acento, exemplo: RELÓGIO, ao clicar nele que seria passado para a url RELOGIO.

Essa função daria certo?

 

Abraço.

 

Simplesmente DO NADA, começou a pegar aqui, mesmo passando RELÓGIO, foi passado para a URL REL%D3GIOS/ e começou a pegar DO NADA.

 

Mexi em nada.

 

Estranho...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que a melhor forma seria "alterar o idioma do texto"

 

Como eu faria isso:

 

Mas pode ser resolvido também direto no html codificando direto no texto. Como por exemplo: á passa a ficar á
Aqui vai um link para uma tabela com os acentos codificados: Tabela de acentos

 

Valeu.

 

Já começou a dar erro novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entre naquele hyperlink que te passei acima e troque os caracteres com acento por aqueles "códigos" lá.

 

Espero ter ajudado,

 

Gustavo Ribas Logullo - Desenvolvedor Web

 

Mas os caracteres são criados e um menu.

A pessoa pode cadastrar qualquer coisa, com qualquer palavra.

Eu pensei em "traduzir" o link, tem como?

 

Acho melhor usar a tua função mesmo.

Vou tentar aqui.

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, eu sei que a pessoa pode cadastrar qualquer coisa.

O que você pode fazer é:

Na hora de inserir no banco de dados fazer o seguinte:

htmlentities($variavel, ENT_QUOTES, "UTF-8");

Isso se seu charset for UTF-8 é claro.

 

Assim não iria dar certo, pq no menu tem que ser carregado com acento, na URL que não.

 

Terei que fazer em javascript, na hora do a href ir sem acento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Automaticamente alguns navegadores convertem espaços e caracteres especiais em: %D3%S2(coisa do genero)

 

A melhor forma de arrumar isso, vamos supor que você tenha um menu com isso, você faz assim:

A função:

/***
* Função para remover acentos de uma string
*
* @autor Thiago Belem <contato@thiagobelem.net>
*/
function removeAcentos($string, $slug = false) {
$string = strtolower($string);

// Código ASCII das vogais
$ascii['a'] = range(224, 230);
$ascii['e'] = range(232, 235);
$ascii['i'] = range(236, 239);
$ascii['o'] = array_merge(range(242, 246), array(240, 248));
$ascii['u'] = range(249, 252);

// Código ASCII dos outros caracteres
$ascii['b'] = array(223);
$ascii['c'] = array(231);
$ascii['d'] = array(208);
$ascii['n'] = array(241);
$ascii['y'] = array(253, 255);

foreach ($ascii as $key=>$item) {
	$acentos = '';
	foreach ($item AS $codigo) $acentos .= chr($codigo);
	$troca[$key] = '/['.$acentos.']/i';
}

$string = preg_replace(array_values($troca), array_keys($troca), $string);

// Slug?
if ($slug) {
	// Troca tudo que não for letra ou número por um caractere ($slug)
	$string = preg_replace('/[^a-z0-9]/i', $slug, $string);
	// Tira os caracteres ($slug) repetidos
	$string = preg_replace('/' . $slug . '{2,}/i', $slug, $string);
	$string = trim($string, $slug);
}

return $string;
}

 

No seu menu:

 echo '<a href="link'.removeAcentos("RELÓGIO").'">RELÓGIO</a>';

 

Não precisa de javascript para fazer o que você quer, tem até funções do próprio php de url que não me recordo o nome para fazer algo parecido, de uma pesquisadinha que você consegue.

 

Abraços e até mais :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

para enviar:

http://php.net/urlencode

 

e para ler:

http://php.net/urldecode

 

leia a documentação lá tem dicas importantes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas acontece que a minha página que tem os menus é em html.

Assim sendo, eu não posso botar códigos phps, uma vez que a extensão dela é .html.

 

Não tem como eu mudar, pois é um script já pronto, que carrega um monte de outras coisas nesse arquivo .html.

 

Eu o abri e tem isso:

 

<li class="%%GLOBAL_LastChildClass%%"><a href="%%GLOBAL_CategoryLink%%">%%GLOBAL_CategoryName%%</a>

%%GLOBAL_SubCategoryList%%

</li>

 

Ou seja, teria que criar uma função em Javascript e carregar nesse a href.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.