Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou montando um menu com include mas estou com aquele problema de acentuação.
Na index se eu colocar
**<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />**
o que eu escrevo no html fica com a acentuação correta porém se uso <?php echo 'Atenção';?> aparece Aten��o
Se eu remove a meta e colocar no início do código <?php header("Content-Type: text/html; charset=ISO-8859-1",true);?> ele inverte. O que escrevo no HTML fica com acentuação errada e o php fica certo.
Alguém sabe se tem como resolver de vez essa questão de acentuação ? Ou seja tanto faz escrever no HTML ou no PHP com acentos ele mostra corretamente ?
Naroku, já fiz o que você falou e tb não funcionou !
você ta tentando colocar acento no menu ou na include?
se for na include esse codigo tem que ta la oO
cara, eu to começando em PHP agora, nunca fiz curso nem nada, vo aprendendo apenas vendo os códigos e vendo pra que eles servem, to procurando um curso aqui!!
tenta colocar esse código na index e nas includes também que eu acho que funciona!!
Ja fiz isso tb e não deu certo !
Tenho 3 paginas
na header tenho uma estrutura buscando do mysql e esta ok!
na user lista de usuarios buscando do mysql e os acentos aparecem zuados!!!!
como pode isso se as duas pásginas estao iguais ?
realmente isso eh estranho
posta a users aqui num codebox que seria mais facil ver :P
eu tambem to com um problema!!
olha um post meu aqui nessa seção e ve se você consegue me ajudar!!!
silas_i tá no php você tá puxando arquivo de banco de dados?
se for o banco pode estar em utf8 e as tabelas em latin_1 ou utf8
porque o utf8 dá erros?
porque ele não contém acentos xD
o padrão que você tem que usar é o iso..
olha só..
pra html:
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
pro php:
<?php header("Content-Type: text/html; charset=ISO-8859-1",true);?>
os dois tem que ficar em iso pra nenhum ficar invertendo entendeu? ^^
caso seja menu em flash que eu acho que não é! você teria que arrumar ele na opção de idiomas.. não lembro a localização exata no menu, não tenho flash aqui nesta máquina..
abraço ^^
obrigado pela ajuda, apenas corrigindo um informacao
olá rails,
>
porque o utf8 dá erros?
porque ele não contém acentos xD
É aconselhavel o uso do UTF8 por possuir suporte Multi-byte.
Para mais informacoes tecnicas sobre metadados no MySQL consulte:
http://dev.mysql.com/doc/refman/4.1/pt/charset-metadata.html
Quanto à questao do silas_i, está um pouco confusa pois se funciona numa página e não funciona em outra obviamente há um erro ou conflito nos scripts.
As causas podem ser diversas. Até mesmo uma distração como editar e salvar um arquivo e executar outro... enfim..
Hinon tb estou achando isso bastante estranho pois em uma página esta ok na outra nao...
Rails tenho que "setar" os dois headers ?
no php e no html ?
bom vou continuar quebrando cabeça com isso.rs.rs.r.sr
Não amigo, você precisa apenas colocar no seu HTML entre as TAGS <head></head> .... só deve haver um meta tag do tipo ;)
Caracteres como 'ç', 'ã', e cia. pertence à tabela ISO-8859-1. Portanto, se pretende utilizar estes caracteres, use essa tabela.
Normalmente, os servidores quando instalados, por padrão usam UTF-8, o que não é desejado pra nós brasileiros, então eu sempre recomendo colocar este header nos códigos que exibam saída HTML:
header('Content-type: text/html; charset=ISO-8859-1');
Fora isso, você ainda terá que dizer ao Browser qual tabela ele irá usar, no caso a tal meta-tag com o ISO-8859-1. Observe que não faz sentido você declarar o header dizendo que "esta página conterá caracteres especiais" e na meta-tag você dizer ao browser pra usar UTF-8, que não contém estes caracteres (UTF-8).
Resumindo, o PHP modificará o cabeçalho enviado informando ao sistema cliente qual tabela foi usada no arquivo (não confunda isso com a sessão head do HTML, isso faz parte da resposta à requisição HTTP), e a meta-tag dirá ao Browser qual tabela usar.
Você ainda pode usaros HTML Special Chars, aquelas sequências tipo: &aaccute;, caso use um charset que não suporte os caracteres em questão.
Perfeito!
márcio leandro completou legal com os HTML Special Chars! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
só que cara.. isso demora se trata de um texto grande.. xD
sim é conflito é das tag's mesmo.. então usa o iso que permite a acentuação!
tem que tá igual nos dois com padrão ISO-8859-1 como eu te disse!
testa ai ;)
silas_i,
mostre o codigo dessas duas páginas e também a esrutura das tabelas MySQL. Somente as tabelas com nas quais as páginas consultam os dados.
tenta usar
<?php echo htmlentities("Atenção"); ?>
vou postar as páginas vejam como esta
index.php
<?php
header("Content-Type: text/html; charset=ISO-8859-1",true);
require "checkLogin.php"; // Verifica se o usuário esta logado
require "func.php"; // Funções
require "config.php";// arquivo de configurações
require "header.php";
// PEGA O USUÁRIO LOGADO
$user = $db->get_row("SELECT * FROM usuarios WHERE id_usuario=".$_SESSION['id']."");
// MONTA O INCLUDE DA PÁGINA SELECIONADA
if ($_GET['submenu']=="")
{
$friend_url = $_GET['menu'];
} $friend_url = $_GET['submenu'];
}
$pagina = $db->get_row("SELECT * FROM pages WHERE friend_url='$friend_url'");
?>
<link href="styles.css" rel="stylesheet" type="text/css" />
<title><?php echo TITLE ?></title>
<div class="wrap">
<?php
if ($pagina->arquivo=="")
{echo "Página não encontrada";}
else
{include 'users.php';}
?>
</div>
<?php include "footer.php"; ?>
header.php (esta busca do mysql e os acentos aparecem ok)
<div id="wphead">
<h1><?php echo COMPANY_NAME; ?></h1>
</div>
<div id="user_info"> Bom dia, <b><?php echo $user->nome; ?></b>. [<a href="#">Meus Dados</a>, <a href="#">Opções</a>, <a href="sair.php">Sair</a>]</div>
<ul id="adminmenu">
<?php
$sql_menu = "SELECT * FROM pages WHERE submenu='n' AND es_ativo='s'";
if ($user->es_admin=="n")
{
$sql_menu = $sql_menu . " AND es_admin='n'";
}
if ($user->es_gerenciar=="n")
{
$sql_menu = $sql_menu . " AND es_gerenciar='n'";
}
$sql_menu = $sql_menu . " order by ordem asc";
//echo $sql_menu;
$menu = $db->get_results($sql_menu);
foreach ($menu as $menu2)
{
if ($_GET["menu"] == "" && $menu2->friend_url == "home")
{
$varClassMenu = "current";
$varID_page = $menu2->id;
}
elseif ($_GET["menu"] == $menu2->friend_url)
{
$varClassMenu = "current";
$varID_page = $menu2->id;
}
else
{
$varClassMenu = "";
}
echo "<a href='?menu=".$menu2->friend_url."' class=$varClassMenu> $menu2->ds</a>";
}
?>
</ul>
<ul id="submenu">
<?php
if ($_GET["submenu"] == "")
{
$varClassSubMenu_static = "current";
}
else
{
$varClassSubMenu_static = "";
}
?>
<a href="#" class="<?php echo $varClassSubMenu_static; ?>">Inicial</a>
<?php
$submenu = $db->get_results("SELECT * FROM pages WHERE submenu='s' AND es_ativo='s' AND id_menu=$varID_page");
foreach ($submenu as $submenu2)
{
if ($_GET["submenu"] == $submenu2->friend_url)
{
$varClassSubMenu = "current";
}
elseif ($_GET["submenu"] == "" && $submenu2->friend_url == "home")
{
$varClassSubMenu = "current";
}
else
{
$varClassSubMenu = "";
}
echo "<a href='?menu=".$_GET['menu']."&submenu=$submenu2->friend_url' class='$varClassSubMenu'>$submenu2->ds</a>";
}
?>
</ul>
<div id="minisub"></div>
users.php (essa página é onde ele mostra os acentos todos zuados)
<?php
//header("Content-Type: text/html; charset=ISO-8859-1",true);
$user = $db->get_results("SELECT * FROM list_users_order_by_nome");
$conta_users = $db->get_row("SELECT * FROM view_conta_users");
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<div id="message" class="updated fade">
<p><strong>usuário cadastrado com sucesso</strong></p>
</div>
<form action="" method="get" name="search" id="search">
<p>
<input type="text" name="usersearch" id="usersearch" />
<input type="submit" value="Procurar Usuário >>" class="button" />
</p>
</form>
<p>Há <strong><?php echo $conta_users->Total; ?></strong> usuários cadastrados | <a href="#">Cadastrar Novo Usuário</a><br />
</p>
<form id="updateusers" name="updateusers" method="post" action="">
<table class="widefat">
<tr class="thead">
<td><strong>ID</strong></td>
<td><strong>Usuários</strong></td>
<td><strong>Nome</strong></td>
<td><strong>Departamento</strong></td>
<td><strong>Grupo</strong></td>
<td><div align="center"><strong>Ações</strong></div></td>
</tr>
<?php
foreach ($user as $users)
{
?>
<tr>
<td><input type="checkbox" name="id_user" id="id_user" />
1</td>
<td><strong><?php echo $users->login; ?></strong></td>
<td><?php echo $users->nome; ?></td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<?php
}
?>
</table>
</form>
estrutura do meu mysql
tabela pages
DROP TABLE IF EXISTS `sistema`.`pages`;
CREATE TABLE `sistema`.`pages` (
`id` int(5) unsigned NOT NULL auto_increment,
`submenu` char(1) NOT NULL COMMENT 'N = MENU; S=SUBMENU',
`ds` varchar(255) NOT NULL,
`friend_url` varchar(255) NOT NULL,
`id_menu` int(11) NOT NULL default '0' COMMENT 'caso seja <> 0, corresponde ao menu em questao',
`ds_eng` varchar(255) default NULL,
`ds_esp` varchar(255) default NULL,
`ordem` int(11) default NULL,
`es_ativo` char(1) NOT NULL default 's' COMMENT 's = página ativa; n=página inativa',
`es_admin` char(1) NOT NULL default 'n' COMMENT 's = página somente vista pelo admin; n=página vista por qualquer usuario, inclusive admin',
`arquivo` varchar(255) default NULL COMMENT 'caso tenha algum nome de arquivo aqui ele abrira ao ser clicado no link',
`id_plugin` int(5) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `id_plugin` (`id_plugin`)
) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=latin1;
tabela de usuários
DROP TABLE IF EXISTS `sistema`.`usuarios`;
CREATE TABLE `sistema`.`usuarios` (
`id_usuario` smallint(5) unsigned NOT NULL auto_increment,
`nome` varchar(40) NOT NULL,
`login` varchar(255) NOT NULL,
`pass` varchar(255) NOT NULL COMMENT 'Senha criptografada',
`es_admin` char(1) NOT NULL default 'n',
`es_ldap` char(1) NOT NULL default 'n',
`es_ativo` char(1) NOT NULL default 's' COMMENT 's = usuario; n=inativo',
`es_gerenciar` char(1) NOT NULL default 'n' COMMENT 'n = desabilita menu Gerenciar s=habilita menu Gerenciar',
`id_depto` int(10) unsigned NOT NULL default '0',
`id_depto_grupo` int(11) NOT NULL default '0',
PRIMARY KEY USING BTREE (`id_usuario`,`id_depto`,`id_depto_grupo`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
ja tentei de tudo e os acentos funcionam na header.php mas na users.php nao !!!!silas_i,
A página header.php está com caracteres htmlEntities por isso a acentuação funciona.
Na página users.php uma metatag declara o conteúdo como UTF-8
mas o conteúdo da página possui codificação ISO
faça um teste simples.
execute esse script
charset.php
>
<?php
// conjuntos de caracteres
$charset[1] = 'utf-8';
$charset[2] = 'ISO-8859-1';
$n = 2; // troque para o valor 1 e veja como a página se comporta.
?>
<html>
<?php
echo '<meta http-equiv="Content-Type" content="text/html; charset='
. $charset[$n] . '" />';
?>
<body>
Água <!-- Água, em formato HTML Entities -->
<br />
Água <!-- Água, em formato ISO-8859-1 -->
</body>
</html>Hinon, fiz o teste e com o utf8 os dois apareceram com os acentos corretos.
Percebi uma coisa as informações do meu mysql estão com acentos e nao com HTML Entities talvez a solução seja tudo o que eu cadastrar no mysql usar HTML Entities, correto ?
Existe alguma função que faça isso pra mim ? vou procurar no php !
silas_i
Existe alguma função que faça isso
sim
http://br.php.net/htmlentities
mas nao recomendo isso porque de um certa forma estaria "corrompendo" os dados
por exemplo
o exemplo que postei acima,
a palavra Água ficaria gravada no banco de dados dessa forma:
"Á"
suponhamos que tenha outras palvras:
Aba
Acetona
essas palavras não possuem caracteres especiais, portanto, a ordem alfabética ficaria confusa
Água
Aba
Acetona
o correto seria
Aba
Acetona
Água
por isso, o aconselho a salvar os dados no formato original
Para evitar transtornos utilize um formato padrão.
Pode ser que por alguma eventualidade necessite cadastrar caracteres multibyte ou de outros conjuntos de codificação
O UTF-8 suporta todos os padrões, por isso é o formato ideal.
Entretanto, se o sistema que v está desenvolvendo utilizar somente e tão somente caracteres Latin-iso, mantenha o collation ISO.
silas_i
as informações do meu mysql estão com acentos
provavelmente o erro está nas suas páginas.aparentemente os dados no BD estão salvos de forma correta
na página users.php você está atribuindo charset UTF-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Essa informação faz com que o browser interprete todos os textos como UTF-8
Na página header.php nao há nenhuma atribuição. Quando isso ocorre, o interpretador do browser determinará um conjunto de caracteres automaticamente.
Estejam preparados para o PHP6
vejam essa noticia do PHP.net Summer Code
evento Google Summer Code 2008
http://code.google.com/soc/2008/php/appinf...D4803BA9A70BCB3
>
The main PHP 6 feature is native Unicode support, which is currently being implemented. Consequently, a lot of work still has to be done to deliver a full native Unicode support. At the moment, the work of updating all the functions in php-src is roughly 60% complete. In order to speed up the process, the decided approach was to use the ICU library (International Components for Unicode).
The main goal of this project is to complete the update of the functions in php-src. The update will consist basically of data type checking. All the parameter parsing has to be ported to use the Unicode methods and the operations over the incoming data have to be consistent with its type. In addition, they also have to return the correct values. In order to achieve this, ICU macros and functions are used to handle Unicode encoded strings properly.
>
Estejam preparados para o PHP6
vejam essa noticia do PHP.net Summer Code
evento Google Summer Code 2008
http://code.google.com/soc/2008/php/appinf...D4803BA9A70BCB3
>
The main PHP 6 feature is native Unicode support, which is currently being implemented. Consequently, a lot of work still has to be done to deliver a full native Unicode support. At the moment, the work of updating all the functions in php-src is roughly 60% complete. In order to speed up the process, the decided approach was to use the ICU library (International Components for Unicode).
The main goal of this project is to complete the update of the functions in php-src. The update will consist basically of data type checking. All the parameter parsing has to be ported to use the Unicode methods and the operations over the incoming data have to be consistent with its type. In addition, they also have to return the correct values. In order to achieve this, ICU macros and functions are used to handle Unicode encoded strings properly.
Saaaaaaallveeeee galeraaaaaaaaaa..... to voltando a ativa depois de um longo e tenebroso tempo.... só to aqui p informar q estava com o problema de acentuação em um formulário PHP, tipo... fiz o formulário no dream... e uma pg PHP p enviar o conteudo preenchido para meu e-mail, chegando no e-mail, ele zuava o balacubaco todo... e meu problema foi resolvido com isso:
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
toda essa alegria é pq sou designer e nao entendo nada de programacao... tenho vertigem só de ver palavrinhas coloridas da tela :wacko:
intao... se servir p alguém... taí.... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif :blink:
abraço.....
Me desculpem resgatar este tópico, mas é que minha dúvida se relaciona a isso, e eu não ía criar um novo tópico para falar sobre isso, não é?
Bom, é o seguinte, estou querendo trabalhar com codificação UTF-8 e, como não poderia ser diferente a qualquer mudança, estou tendo problemas.
Bom, vamos por partes.
1) O Banco de Dados (MySQL):
Tenho uma tabela de categorias, a qual está utilizando a codificação Collation: utf8_general_ci, e as colunas dessa tabela também estão usando a mesma Collation.
2) O arquivo PHP:
O meu arquivo PHP que recbe os resultados do Banco está assim:
<?php
header("Content-Type: application/xhtml+xml; charset=utf-8", true);
echo "<?xml version='1.0' encoding='UTF-8'?>\n";
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">](http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd)
<html xmlns="[http://www.w3.org/1999/xhtml"](http://www.w3.org/1999/xhtml) xml:lang="pt-br" lang="pt-br">
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
[continua]Até aqui, não está tudo como deveria?
Eu verifiquei os dados no Banco, estão todos corretos. Para ter certeza que os dados estariam corretos, eu criei uma nova tabela e inseri os dados novamente. Mas... Quando tenho palavras acentuadas, ele está retornando aquele losango com um sinal de interrogação dentro (no caso do Firefox) no lugar do caractere.
Mas é assim, tirando o Banco, ele apresenta erros da mesma forma. Estou trabalhando com includes, e adicionei inclusive este trecho em cada arquivo de include:
header("Content-Type: application/xhtml+xml; charset=utf-8", true);Mas não adianta, os caracteres acentuados são exibidos com aquele losango.
E o engraçado é que, se eu pego o conteúdo do include e coloco diretamente na página que o chama, aí não apresenta erros! Mas os dados do Banco continuam com erros (tudo bem, resolvendo este do include, depois verifico o do Banco).
Pergunto-lhes: o que deve ser feito para que os includes sejam exibidos corretamente com uso do charset UTF-8?
Como falei, depois verifico o banco...
Obrigado desde já!
verifique se o editor de textos está usando encode UTF-8
pode ser que você esteja usando um editor de textos com encoding LATIN_ISO ou algum outro
Opa pessoal. Estive acompanhando este tópico e sei que ele está "resolvido".
Mas, com o perdão da palavra, não resolveram não.
O padrão UTF-8 é o mais indicado para os sites de hoje em dia. O problema é que muita gente encontra problemas
ao resolver isso no HTML + PHP + MySQL.
O UTF-8 suporta acentos SIM.
O UTF-8 suporta outras letras de outros idiomas.
Isso significa que o ISO-8859-1 está meio desatualizado. A W3C recomenda UTF-8.
Porém, se vocês adicionarem essas tags:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml"](http://www.w3.org/1999/xhtml) xml:lang="pt-br">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
Não é nescessário adicionar o comando:
<?php header('Content-Type: text/html; charset=utf-8') ?>Isso é muito errado, pois o Validador da W3C acusa erro de dois headers, e avisa que considerará apenas um.
Uma forma de ajustar isso e ver onde está errado é:
Só que isso todos fazem, e nunca da certo. Isso porque o canal que o PHP abre com o MySQL, tanto para
consulta, exibição e conexão, por padrão é latin1.
Para resolver este problema, basta apenas adicionar os seguintes comandos após a conexão ser aberta:
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
Com isso, o PHP para de tentar converter para latin1 o UTF-8, e o browser passa a exibir corretamente os acentos dentro
dos padrões hoje utilizados.
Só isso. Espero que sirva para quem veio até aqui, e também para quem venha a ter essa dúvida.
Abraços.
L2mago
isso que você comentou está certo mas não condiz com o tópico
no tópico nao diz que UTF-8 não é o correto.
a escolha do encoding depende da decisão de cada desenvolvedor.
pessoalmente sempre aconselho uso do UTF-8.
consulte: PHP, HTML, MySQL - Charset Encoding
Olá Moderador, estava apenas dando uma resposta ao que o Rails**** disse:
>
porque o utf8 dá erros?
porque ele não contém acentos xD
o padrão que você tem que usar é o iso..
olha só..
pra html:
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
pro php:
<?php header("Content-Type: text/html; charset=ISO-8859-1",true);?>
Cada um escolhe sim, o charset que quiser. Como também podemos escolher usar XHTML/CSS ou HTML antigo.
Achei meio desnecessária sua resposta. Mas faça um retorno do banco neste teu link do jeito que criou,
e terá o mesmo erro citado aqui.
De nada.
1. veja data do tópico
2. analise as circuntâncias
3. analise o que escreveu e veja se há coerência com o contexto do tópico.
4. falow
e mais o resto do código
como o menu eh com include, você pode o include depois do html que le normalmente (pelo menos comigo eh assim) ^^
Espero ter ajudado!!
Abraço