Ir para conteúdo

Arquivado

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

silas_i

[Resolvido] Acentuação UTF-8 e ISO

Recommended Posts

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dentro de uma pagina php você pode colocar FORA do código PHP (depois do ?>)

 

 

<HTML>

<HEAD>

<TITLE>Titulo da página</TITLE>

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

....

 

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Naroku, já fiz o que você falou e tb não funcionou !

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja fiz isso tb e não deu certo !

 

Tenho 3 paginas

 

- index

- header (include)

- users (include)

 

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

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..

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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'];
}
else
{
	$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 !!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.....

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.