Solucionado (ver solução)
Solucionado
(ver solução)
14
respostas

Acentuação com problemas na listagem

No resultado da pesquisa, as letras acentuadas aparecem como caractere estranho. Modifiquei o "charset" do cabeçalho para ISO-8859-1 e resolveu a listagem, porém, se utilizo acentuação na página, esta fica problemática. O que houve? Como corrigir isso?

14 respostas

Ola Marcelo, tudo bom?

No head do seu html coloque UTF-8 assim:

    <head>
        <meta charset="UTF-8"/>
    </head>

Funcionou?

Olá Mateus, estou bem e você?

O "head" estava com UTF-8, mas ao exibir o resultado da consulta SQL, a palavra lápis aparece assim: "l�pis". Daí mudei para testar. Quando mudei para ISO-8859-1 resolveu o problema da pesquisa, porém, se eu adiciono alguma palavra acentuada no html, apresenta o mesmo problema. Ou seja, resolve de um lado e piora de outro. :P

Obrigado pela atenção.

Dá uma olhada neste post do fórum https://cursos.alura.com.br/forum/topico-problemas-com-acertuacoes-23931 está duvida é parecida com a sua, dá um olhada na resposta do instrutor, acho que pode ser esse o problema.

Olá Mateus. Abri o arquivo no bloco de notas e realmente ele estava em ANSI, fiz a modificação mas, não houve resultado. Acredito que possa estar relacionado ao banco, pois, o problema apresenta só com os resultados da pesquisa.

Descobri que o problema acontece quando eu insiro um dado acentuado através do comando sql direto no banco. Como eu avancei os estudos e comecei a deletar e adicionar novas informações através do sistema criado, reparei que pela query realizada no php, o defeito não acontece! Mas se eu for no banco de dados e criar um "lápis" por lá, ao listar na página, o problema surge novamente.

Quando eu criei o banco, usei o seguinte comando:

CREATE DATABASE loja
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;

5 dias que abri o tópico e até agora nenhuma atenção de algum moderador!!! Que beleza de suporte esse aqui! :(

solução!

Olá Marcelo, tudo bom ?

Tenta colocar o seguinte código no arquivo de conexão:

$charset = mysqli_query($conexao, "SET NAMES 'utf8'");

Deu certo ?

Olá Tiago, estou bem e vc, como vai?

Com este código deu certo, mas os dados que estavam corretos antes, agora aparecem com o defeito.

Posso deixar com este código no arquivo de conexão que a principio não deverá dar mais problemas. Mas, o que terá acontecido? Nas aulas ele não adicionou esse código. Fiz tudo conforme estava nas aulas. Quero entender o que está acontecendo. Será que foi algo errado que fiz ao criar o banco?

Obrigado pela atenção Tiago.

P.S.: E eu aqui ainda na espera de um suporte de algum instrutor/moderador. 10 dias já.

Tiago, eu não entendi como esse código funciona! Com ele nós apenas atribuímos a query à variável $charset, não é isso? Como é que ela roda se em todo o sistema não há nenhuma chamada a esta variável? Estou confuso!

Obrigado. :D

Então Marcelo, esse código que te passei seria uma extensão a mais para esses casos de caracteres ilegíveis.

A variável é mais uma verificação caso você precise para ver se o banco que está conectado tem suporte ao charset configurado.

Sobre o outro problema que está ocorrendo, você poderia me descrever com mais detalhes o que seria ? Talvez eu possa te ajudar.

Mas é aí que fica minha dúvida, se essa variável é apenas uma opção a mais que terei, e eu apenas atribuí o comando "SET NAMES" a ela, mas não a executei no programa, como foi que ela surtiu efeito? Ou seja, eu apenas adicionei essa linha, e deu resultado!!! A meu ver não era para acontecer nada. Me desculpe se a dúvida é tola, mas, é que realmente sou iniciante.

Sobre o problema em questão, vou tentar ser mais claro: Inicialmente, se eu vou ao banco de dados e crio um dado acentuado diretamente lá, para um select no sql aparece normal, mas na página aparece com defeito (L�pis). Se eu crio um dado acentuado no banco através da página (pelos comandos do PHP), na página aparece normal, mas se eu for direto no banco e fizer um select, lá aparece com o defeito (Lápis). Após ter colocado sua linha, quando adiciono um dado acentuado pela página, fica tudo certo... tanto na página, quanto se eu fizer um select direto no banco. Porém, as anteriores que estavam funcionando na página, mas com problemas direto no banco, passaram a apresentar o problema na página também. O que na realidade acho que é normal, devido a correção do problema. Não sei se consegui ser claro ou se deixei mais confuso. (rs)

Eu poderia simplesmente apagar tudo e fazer novamente com o novo comando que você me passou... mas a questão aqui é: eu gostaria muito de entender o que houve! Principalmente pq criei o banco em UTF-8, e o charset do html está UTF-8.

Mais uma vez sou muito grato por sua atenção.

Olá Marcelo, acredito que entendi o que ocorreu. Provavelmente foi incompatibilidade com a configuração do charset do seu banco com a do script.

Recomendo apagar os dados que ficaram com erro no inicio e manter somente as atuais com a nova configuração. E sobre o código que te passei é como se eu estivesse comunicando diretamente com o mysql e dizendo que quero a seguinte interpretação dos meus dados, em outras palavras com se eu estivesse "forçando" a ler meus caracteres com o charset UTF-8. Por isso não uso em nenhuma parte do meu código somente no momento de estabelecer conexão ao meu banco.

Abaixo vou deixar um link que possa te explicar com mais detalhes técnicos o que deve ter ocorrido:

http://ajuda.maxrevenda.com.br/resolvendo-problemas-de-caracteres-acentuados-no-mysql/

No demais fico a disposição para mais alguma questão que queira comentar. Abraços.

Olá Tiago, certamente foi alguma incompatibilidade entre os "charsets". Sua ajuda foi muito útil. Vou marcar sua resposta lá de cima como a solução. Mas, fico inconformado de não receber nenhuma atenção dos instrutores. >:(

Muito obrigado por sua atenção e disposição. Um grande abraço. (y)

Obrigado por acrescentar esta informação, não tinha reparado no problema, agora nos deixa informado sobre quando precisarmos de tal solução :)