mzaidan 2 Denunciar post Postado Junho 14, 2011 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
Gustavo Ribas Logullo 0 Denunciar post Postado Junho 14, 2011 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
mzaidan 2 Denunciar post Postado Junho 14, 2011 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
Gustavo Ribas Logullo 0 Denunciar post Postado Junho 14, 2011 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
mzaidan 2 Denunciar post Postado Junho 14, 2011 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
Gustavo Ribas Logullo 0 Denunciar post Postado Junho 14, 2011 Sim daria, pois o que ele vai exibir está fora do value, ou seja, apenas a visualização, com essa função você ela pegar somente o dado que é enviado ao servidor. Compartilhar este post Link para o post Compartilhar em outros sites
mzaidan 2 Denunciar post Postado Junho 14, 2011 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
Gustavo Ribas Logullo 0 Denunciar post Postado Junho 14, 2011 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 Compartilhar este post Link para o post Compartilhar em outros sites
mzaidan 2 Denunciar post Postado Junho 14, 2011 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
Gustavo Ribas Logullo 0 Denunciar post Postado Junho 14, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
mzaidan 2 Denunciar post Postado Junho 14, 2011 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
Gustavo Ribas Logullo 0 Denunciar post Postado Junho 14, 2011 Mas cara, dessa forma ele insere codificado no banco de dados, a hora que você for imprimir na tela, irá imprimir acentuado, aí você usa a função que te passei para retirar o acento e mandar para a url. Compartilhar este post Link para o post Compartilhar em outros sites
mzaidan 2 Denunciar post Postado Junho 14, 2011 Para mim seria melhor em javascript, postei la, mas transferiram para PHP. Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Junho 14, 2011 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
William Bruno 1501 Denunciar post Postado Junho 14, 2011 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
mzaidan 2 Denunciar post Postado Junho 14, 2011 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