Jump to content


Photo

Substituir Letras


  • Faça o login para participar
9 replies to this topic

#1 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 26/02/2010, 18:28

Olá,

To fazendo uma formatação de texto, so que ta tudo errado.

Segue abaixo o um teste que fiz:

Teste 01

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <?php
      $nome = "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ";
      $formatado = preg_replace("[a-zA-Z0-9]", "", strtr($nome, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));
      $formatado = preg_replace("[ ]","",$formatado);
      $formatado = preg_replace("[^]","",$formatado);
      $formatado = preg_replace("[´]","",$formatado);
      $formatado = preg_replace("[`]","",$formatado);
      $formatado = preg_replace("[~]","",$formatado);
      $formatado = preg_replace("[¨]","",$formatado);
      $formatado = preg_replace("[_]","",$formatado);
      $formatado = strtolower($formatado);
      echo $formatado;
    ?>		
  </body>
</html>

Resultado final é este: aaeoouaaeiouc�������������

----
Teste 02

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  </head>
  <body>
    <?php
      $nome = "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ";
      $formatado = preg_replace("[a-zA-Z0-9]", "", strtr($nome, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));
      $formatado = preg_replace("[ ]","",$formatado);
      $formatado = preg_replace("[^]","",$formatado);
      $formatado = preg_replace("[´]","",$formatado);
      $formatado = preg_replace("[`]","",$formatado);
      $formatado = preg_replace("[~]","",$formatado);
      $formatado = preg_replace("[¨]","",$formatado);
      $formatado = preg_replace("[_]","",$formatado);
      $formatado = strtolower($formatado);
      echo $formatado;
    ?>		
  </body>
</html>

Resultado final é este: aaeoouaaeiouc€ƒ‚‰š“”•šœ‡


Alguem pode me dizer o que esta acontecendo?





PS: eu não sei porque diabos quando eu posto o codigo ele ta quebrando a linha no $nome e no primeiro $formatado.. no meu codigo original não esta assim

Edição feita por: Max William, 26/02/2010, 18:33.

Se eu lhe ajudei ;) Clique para agradecer!

#2 thioz21

thioz21

    Normal

  • Usuários
  • 116 posts
  • Sexo:Masculino
  • Localidade:Passos

Posted 26/02/2010, 18:59

tente usar assim

<html>
 <head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
 </head>
 <body>
	<?php
 	$nome = "áàãâéêíóôõúüçÁÀ
ÃÂÉÊÍÓÔÕÚÜÇ";
 	$formatado = preg_replace("[a-zA-Z0-9]", "", strtr($nome, "áàãâéêíóôõúüçÁÀ
ÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));
 	$formatado = preg_replace("[ ]","",$formatado);
 	$formatado = preg_replace("[^]","",$formatado);
 	$formatado = preg_replace("[´]","",$formatado);
 	$formatado = preg_replace("[`]","",$formatado);
 	$formatado = preg_replace("[~]","",$formatado);
 	$formatado = preg_replace("[¨]","",$formatado);
 	$formatado = preg_replace("[_]","",$formatado);
 	$formatado = strtolower($formatado);
 	echo utf8_decode($formatado);
	?> 	
 </body>
</html>

usando utf8_decode no php

PS.: fiz o teste aqui e funciono com o utf8_decode

Edição feita por: thioz21, 26/02/2010, 19:05.


#3 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 26/02/2010, 19:03

Pode ser a codificação do próprio arquivo.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#4 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 02/03/2010, 17:18

To tão puto com esse negocio que eu ja to a ponto de fazer quele 'xxxxxx-se' e procura outra profissão.
segue o codigo problema sem nenhuma razão para isso.

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  </head>

  <body>
    <form name="cadastra_produto" method="POST" action="" enctype="multipart/form-data">
      <input type="file" name="arquivo" />
      <input type="submit" name="enviar" value="enviar" />
    </form>
  </body>
</html>

é um codigo muito simples, fiz exatamente para fazer somente o teste o uso da função que le o arquivo winzip, e o processo do php vai me retornar o nome dos arquivos.

Problema é que não importa que codificação eu use, não importa se eu faço um codigo str_replace, ou pre_replace ou qualquer outro comando que vocês conhecerem.. ele simplesmente continua mostrando a porcaria do nome errado.

O arquivo teste em questão, eu nem quis força muito a barra pro lado dele coloquei o nome da imagem com alguns acentos nada mais que isso.
Arquivo: úma palavrã com múitôs acentos ^ sím é müito cabrèirô.jpg

agora o codigo php que me retorna o nome do arquivo.

if(isset($_POST['enviar']))
{
  # Variável
  $arquivo_nome = $_FILES["arquivo"]["name"];
  $arquivo_temp = $_FILES["arquivo"]["tmp_name"];
  $arquivo_type = $_FILES["arquivo"]["type"];
  $zip = zip_open($arquivo_temp);
    
  if($zip)
  {
    $arquivos = null;
    $imagem   = 'deflated';
    $pasta    = 'stored';

    while ($zip_entry = zip_read($zip))
    {
      $tipo = zip_entry_compressionmethod($zip_entry);
      
      if($tipo == $pasta) # Nome da pasta
      {
        $diretorio = zip_entry_name($zip_entry);
      }
       
      if($tipo == $imagem) # Nome do arquivo
      {
        $arquivo_nome = zip_entry_name($zip_entry);
        $arquivo_nome = str_replace($diretorio, "", $arquivo_nome);
        
        # Retorno a string
        $arquivos .= '|'.$arquivo_nome;
      }
    
    }

    # Deletar primeira barra
    $arquivos = substr($arquivos,1);
    
    # Criar Array com nomes
    $array = explode("|", $arquivos);

    var_dump($array);

    zip_close($zip);
  }
}

Teste (Alguns pode não fazer sentido algum, mas quero mostra que nem quando não tem sentido não ta mostrando correto)

Situação:
-> Arquivo tipo ANSI
-> Charset ISO-8859-1
array(1) { [0]=> string(55) "£ma palavrÆ com m£t“s acentos^ s¡m ‚ mito cabrŠir“.jpg" }

Situação:
-> Arquivo tipo ANSI
-> Charset ISO-8859-1
-> utf8_decode
array(1) { [0]=> string(54) "£ma palavr?com m£t“s acentos^ s¡m ‚ mito cabrŠir“.jpg" }

Situação:
-> Arquivo tipo ANSI
-> Charset ISO-8859-1
-> utf8_encode
array(1) { [0]=> string(64) "£ma palavrÆ com m£t“s acentos^ s¡m ‚ mito cabrŠir“.jpg" }

--------------------------

Situação:
-> Arquivo tipo ANSI
-> Charset UTF-8
array(1) { [0]=> string(55) "�ma palavr� com m�t�s acentos^ s�m � m�ito cabr�ir�.jpg" }

Situação:
-> Arquivo tipo ANSI
-> Charset UTF-8
-> utf8_decode
array(1) { [0]=> string(54) "�ma palavr?com m�t�s acentos^ s�m � m�ito cabr�ir�.jpg" }

Situação:
-> Arquivo tipo ANSI
-> Charset UTF-8
-> utf8_encode
array(1) { [0]=> string(64) "£ma palavrÆ com m£t“s acentos^ s¡m ‚ mito cabrŠir“.jpg" }



Agora eu peço humildemente, alguem me da uma luz..
Se eu lhe ajudei ;) Clique para agradecer!

#5 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 03/03/2010, 09:06

Max, bom dia.

Qual o charset da IDE?

Abraços.
Mateus Antunes
Mateus Antunes
MBASistemas

#6 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 03/03/2010, 09:50

Como o felipe pena sugeriu, pode não ser problema do código e sim da codificação do arquivo!

Caso seu editor possua, veja qual é o mesmo e altere e faça o teste!

No dreamweaver, ele fica lá embaixo: Posted Image

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#7 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 11/03/2010, 09:19

Desculpe a demora,

@MBA,
Não importa a codificação que eu uso, ja tentei criar um arquivo em ANSI, em UTF-8 e ambos me retorna o mesmo problema, como mostrei acima nos exemplos.

@Maykel Esser,
Ja efetuei testes com UTF-8 e ANSI


PS: Trabalho com Notepad++

Edição feita por: Max William, 11/03/2010, 09:22.

Se eu lhe ajudei ;) Clique para agradecer!

#8 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 11/03/2010, 09:30

Olá Max!

Tente isso como ultima alternativa: http://php.net/manua...tmlentities.php

Se não der certo, sinceramente não sei o que pode ser... aí a parada deve ser mais embaixo (servidor)

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#9 Fábio Web Arts

Fábio Web Arts

    Web IN Arts

  • Usuários
  • 299 posts
  • Sexo:Masculino
  • Localidade:No Saco De Magé
  • Interesses:Tudo que for da área de Informática

Posted 12/03/2010, 17:08

cara tipo nao seria isso aqui nao:

strtolower

pq se as letras estao em maiusculas quando tu da um lower tu esta colocando elas como minusculas denovo!!!

#10 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 15/03/2010, 14:08

@Fábio Web Arts,

Acredito que não, porque não faz muito sentido. Eu ja tentei tira ele para ver se resolvia o problema e nada, continuou na mesma.. mas eu ja desisti de tentar arruma isso.. minha esperança é que o usuario não faça nada de proposito justamente para me sacanear ^^


Agora uma pergunta não relacionada diretamente ao PHP, mas que tem mesmo problema..
Em um formulario de cadastro, eu trato todo o post EXATAMENTE na mesma maneira, porem, o campo cidade eu passo escrito Maringá, ele grava no SQL Maring? e apresenta Maring? quando eu retorno este dado.. o interessante é que eu testei uma senha, escrevi maringá na senha... ¬¬' e ele salvo maringá no banco.. ou seja, como dois post do mesmo formulario, tratados da mesma maneira podem ter resultados diferente no MySQL ?

Sinceramente.. eu to quase desistindo de PHP e começando a trabalha com Ruby pq.. ta osso, PHP ta me sacaneando na cara larga!
Se eu lhe ajudei ;) Clique para agradecer!




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq