Ir para conteúdo

POWERED BY:

Arquivado

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

hvjohny

Extrair arquivo .ZIP: Problema de acentuação

Recommended Posts

Boa noite galera....

Venho de novo pedir a ajuda de vocês em menos de 1 dia ...

Bom, ontem consegui resolver um problema que é bem parecido que vou perguntar agora, para quem quiser dar uma olhada, aqui está o link.

 

Resumidamente, no post anterior, ao salvar o arquivo na pasta pelo uploadfy, as acentuações ficavam com problema, foi facilmente resolvido usando a função utf8_decode().

 

Agora estou com problema na extração de arquivos, os acentos somem automaticamente, e o "ão" = "Æo".

Veja o código que estou usando para extrair os arquivos:

 

$zip = new ZipArchive();
   if( $zip->open( '../../../arquivos/CD/'.$novo_nome )  === true){					    
	if(!file_exists('../../../arquivos/CD/faixas'))		
	   mkdir('../../../arquivos/CD/faixas', 0777);																 
     if($zip->extractTo('../../../arquivos/CD/faixas')) //Faço a extração e verifico.
     {
        for ($i = 0; $i < $zip->numFiles; $i++) { //corro todos os arquivos do .zip para pegar seus respectivos nomes.
	$stat = $zip->statIndex($i);	
	$arquivoNome[] = trim($stat['name'].PHP_EOL); // guardo os nomes em um array para usar posteriormente
	} 
	$nomeZip =  $zip->filename;	
      }
    }

Bom galera, fiz vários e vários teste, pesquisei e pesquisei. Tentei de tudo e nada deu certo.

Quando utilizo a função utf8_decode($arquivoNome[$i]), todos os acentos passam a receber "?" no lugar.

já quando uso a utf8_encode($arquivoNome[$i]), todos as letras que possuem as letras somem, e o "ão" = "Æo" (isso é o que acontece quando não uso função nenhuma).

 

Bom, a única conclusão que consegui tirar disso tudo, é que ele já traz os arquivos com erro na acentuação ao buscar os arquivos no .ZIP.

Agora peço a ajuda de vocês, revirei o google e não consegui encontrar nada que resolvesse.

Por favor, conto com a ajuda de vocês.

Desde já, muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhei rapidamente o outro tópico, que apesar de estar marcado com resolvido, infelizmente não resolveu de forma adequada.

O que fez foi, numa analogia, como varrer sujeira para debaixo do tapete. A gambiarra resolveu para aquele caso específico, mas o problema persiste, como pode ver.

Estou postando isso apenas para deixar como exemplo a outros que apontam sugestões aleatórias para um problema que só se resolve de fato com uma correta configuração do ambiente.

 

PHP, HTML, MySQL - Charset Encoding

Todavia, fica a seu critério o modo como pretende resolver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhei rapidamente o outro tópico, que apesar de estar marcado com resolvido, infelizmente não resolveu de forma adequada.

O que fez foi, numa analogia, como varrer sujeira para debaixo do tapete. A gambiarra resolveu para aquele caso específico, mas o problema persiste, como pode ver.

Estou postando isso apenas para deixar como exemplo a outros que apontam sugestões aleatórias para um problema que só se resolve de fato com uma correta configuração do ambiente.

 

PHP, HTML, MySQL - Charset Encoding

Todavia, fica a seu critério o modo como pretende resolver.

Dei uma olhada no seu post. Muito bem explicado, parabéns.

Porém todas as suas dicas eu já estou seguindo. Até mesmo no tópico anterior que criei, e a única solução que encontrei para a solução do problema foi o utf8_decode();

Já está tudo setado para utf-8: banco, página, include, tudo. e mesmo assim o problema persiste.

Como disse, o problema acontece ao ler os arquivos de dentro de zip. E não faço a mínima ideia de como resolver isso :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O simples fato de precisar recorrer ao utf8_decode() demonstra que há alguma falha na configuração.

 

Observação importante é, nomes de arquivos contendo carateres especiais podem causar corrompimentos se o sistema operacional ou o meio web não suportar o encode da nomenclatura do mesmo.

 

Se vc garante que o ambiente está devidamente configurado, o que posso imaginar é que seja necessário configurar o servidor web ou o sistema operacional (servidor)

 

Creio que esteja usando Apache, se for o caso, verifique se o Apache está com suporte a multibyte.

 

Verifique as configurações MBString do PHP.

http://forum.imasters.com.br/topic/467664-erro-acentuacao-php/

 

E mais, nos seus arquivos PHP, inicie-os com um bootstrap para fazer as setagens em tempo de execução. Apenas por precaução.

Exemplo:

 

define( 'CHARSET',   'UTF-8' );
ini_set( 'default_charset', CHARSET );
ini_set( 'mbstring.http_output', CHARSET );
ini_set( 'mbstring.internal_encoding', CHARSET );
 
header( 'Content-Type: text/html; charset=' . CHARSET );

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O simples fato de precisar recorrer ao utf8_decode() demonstra que há alguma falha na configuração.

 

Observação importante é, nomes de arquivos contendo carateres especiais podem causar corrompimentos se o sistema operacional ou o meio web não suportar o encode da nomenclatura do mesmo.

 

Se vc garante que o ambiente está devidamente configurado, o que posso imaginar é que seja necessário configurar o servidor web ou o sistema operacional (servidor)

 

Creio que esteja usando Apache, se for o caso, verifique se o Apache está com suporte a multibyte.

 

Verifique as configurações MBString do PHP.

http://forum.imasters.com.br/topic/467664-erro-acentuacao-php/

 

E mais, nos seus arquivos PHP, inicie-os com um bootstrap para fazer as setagens em tempo de execução. Apenas por precaução.

Exemplo:

 

 

define( 'CHARSET',   'UTF-8' );
ini_set( 'default_charset', CHARSET );
ini_set( 'mbstring.http_output', CHARSET );
ini_set( 'mbstring.internal_encoding', CHARSET );
 
header( 'Content-Type: text/html; charset=' . CHARSET );

Obrigado pela ajuda amigo.

Á respeito do meu outro post, usei o utf8_decode() para que a acentuação do arquivo ficasse correta localmente. Porém, quando upei no servidor, a acentuação estava errada... e ao tirar a função utf8_decode(), a acentuação ficou correta --'

Coloquei as setagens no arquivo .php, e mesmo assim na extração de arquivos continuo com "?" no servidor, e localmente substituiu por um carácter especial...

Isso ta me deixando confuso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo.. mais fácil vc seguir as boas práticas web e de programação como um todo e não usar arquivos que tenham acentuação no nome.

 

lá na hora do upload, remova os acentos pelas respectivas letras sem acento. Dessa forma vc terá muito menos dores de cabeça. Arquivos não podem ter acento mesmo e pronto, corrija a fonte do problema.

 

Os nomes de arquivos podem ter acentuação sim mas, apenas terá problemas com sistemas operacionais e ambientes mal configurados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique qual o encode dos arquivos dentro do zip

 

mb_detect_encoding

Desculpe a demora pra responder amigo... O tempo está curto.

Agradeço a ajuda!

Fiz o que pediu, echo nos nomes dos arquivos que estão dentro do zip. retorno:

 

ASCII

ASCII

 

UTF-8

 

ASCII

ASCII

 

Ou seja, alguns retornam ASCII e outros UTF-8. Posso estar enganado, mas acho que os que retornam UTF-8, são os acentuados.

Não tenho ideia do que fazer com essa informação :s

Muito obrigado!

tipo.. mais fácil vc seguir as boas práticas web e de programação como um todo e não usar arquivos que tenham acentuação no nome.

 

lá na hora do upload, remova os acentos pelas respectivas letras sem acento. Dessa forma vc terá muito menos dores de cabeça. Arquivos não podem ter acento mesmo e pronto, corrija a fonte do problema.

Olá amigo, realmente, tirar os acentos resolveria muita dor de cabeça. Porém como citei, são faixas de músicas, e tirar a acentuação nesse caso não é muito bacana. Obrigado.

 

 

Nenhuma ideia pessoal? :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite colega. Se tivesse visto o tópico desde o início, certamente teria lido a parte em que disse alguma coisa relacionada a : "já procurei no google". E justamente por não ter achado, vim recorrer aos profissionais do fórum, com mais experiência e que pudessem me ajudar.

Bom, obrigado por tentar me ensinar usar o google, mas essa ferramenta eu já usei. Infelizmente nem todos os problemas estão solucionados pra estarem lá certo?! Se alguém lhe perguntar qual é a cura de uma doença sem a existência da cura, poste o link do google. Vai que né....

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que vc quer é uma solução para o seu problema

 

Você não está postando o que está fazendo.

 

Tudo bem que vc já procurou no google, mas você não mostrou o que procurou, como buscou, se buscou as palavras chave corretamente.

 

Além disso, tentei ajudá-lo com diagnósticos, tive paciência e usei parte de meu tempo para auxiliálo.

 

Entre os posts #8 e o #9 há uma diferença de quase 1 mês. Eu senti falta de você, por que demorou para dar resposta ? :(

 

Dentro desse período extenso você não fez nada e simplesmente veio aqui ver se alguém faria o seu serviço ?

 

Eu estava evitando escrever isso pois é deselegante e até o momento, desnecessário. Você foi grosseiro com alguém que estava disposto a ajudá-lo.. espero que entenda a resposta.

 

Sobre o assunto do tópico, se vc entrar nesse link que postei vc encontrará num dos links do resultado do google um possível meio para solucionar.

Para chegar nessas palavras chave e conjunto de resultados, me custou uns 20 minutos pois eu entrei em 6 ou 8 links do resultado para analisar.

 

A sua "mãe" não te ensinou a dizer por favor ? obrigado ? coisas do tipo ?

 

Na foto vc está com farda do exército.. uma pena um militar ou ex-militar com esse nível de educação e ainda querendo que outros façam o seu serviço.

 

Além de mal educado e mal agradecido, é preguiçoso e exigente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O que vc quer é uma solução para o seu problema

 

Você não está postando o que está fazendo.

 

Tudo bem que vc já procurou no google, mas você não mostrou o que procurou, como buscou, se buscou as palavras chave corretamente.

 

Além disso, tentei ajudá-lo com diagnósticos, tive paciência e usei parte de meu tempo para auxiliálo.

 

Entre os posts #8 e o #9 há uma diferença de quase 1 mês. Eu senti falta de você, por que demorou para dar resposta ? :(

 

Dentro desse período extenso você não fez nada e simplesmente veio aqui ver se alguém faria o seu serviço ?

 

Eu estava evitando escrever isso pois é deselegante e até o momento, desnecessário. Você foi grosseiro com alguém que estava disposto a ajudá-lo.. espero que entenda a resposta.

 

Sobre o assunto do tópico, se vc entrar nesse link que postei vc encontrará num dos links do resultado do google um possível meio para solucionar.

Para chegar nessas palavras chave e conjunto de resultados, me custou uns 20 minutos pois eu entrei em 6 ou 8 links do resultado para analisar.

 

A sua "mãe" não te ensinou a dizer por favor ? obrigado ? coisas do tipo ?

 

Na foto vc está com farda do exército.. uma pena um militar ou ex-militar com esse nível de educação e ainda querendo que outros façam o seu serviço.

 

Além de mal educado e mal agradecido, é preguiçoso e exigente.

 

Sim, ela ensinou, e fui tão educado que agradeci. Será que você que foi preguiçoso suficiente pra não ler até o final?

Será que você foi preguiçoso o suficiente pra não ler o meu post sobre as desculpas por ter demorado pra responder?

Será que você foi preguiçoso o suficiente pra não ler o meu post em que disse que já usei todos os meus conhecimentos sobre o assunto?

 

Será que não foi você o preguiçoso, em que se negou a digitar algumas palavras tais como: "Aqui está uma busca que realizei pra você, tente desse jeito, talvez funcione. link" para que eu pudesse entender que estava agindo de boa fé, e não querendo satirizar o meu post?

 

Hinom, agradeço pela sua tentativa de ajuda, mas no momento você está atrapalhando. Se eu soubesse solucionar já teria feito.

Agora por favor, se você se acha tão educado assim, não fale coisas ofensivas pra quem o Sr. não conhece, muito menos coloque o nome "mãe" no meio, está bem?

Se fosse tão intelecto como se mostra ser, pensaria: "Poxa, talvez ele entenda isso como uma sátira".

Não venha falar da minha vida sem me conhecer, respeito a sua, não te disse palavras ofensivas em momento algum, então não faça isso.

Sei admitir que não fui gentil na primeira resposta, mas volto a repetir que, em momento algum falei coisas ofensivas para o Sr.

Tive uma ótima educação, obrigado pela preocupação. E também tive uma ótima formação militar.

E é com essa ótima formação que te agradeço, agora sabendo das boas intenções.

Também peço desculpas, por ter ofendido o Sr.

 

Bom, tomara que você tenha lido até o final para ver que agradeci né?!

Novamente, muito obrigado, e um grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, não encontrei a solução para esse problema.

Tive que mudar parte do sistema, retirando a extração dos arquivos para resolver o problema. Talvez o erro de acentuação aconteça exclusivamente no uploadify.

Agradeço a ajuda de todos, muito obrigado.

Abraços.

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.