Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera,
estou tento problemas com os seguintes itens: TinyMCE + PHP + INSERT + UTF-8 =
Caracters(Ex): (digitado no form) até (inserido no bd) até
Estou cansado de tanto procurar soluções na net e realizar tentativas.
Vamos ao cód:
1º) CONFIGURAÇÕES DO BD:
DataType = text
charset = utf8
Collation = utf8_general_ci
2º) FORMULÁRIO (index.php):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
<head>
<title>TESTE</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="_js/tinymce-textarea/jscripts/tiny_mce/tiny_mce.js"></script>
</head>
<body>
<script type="text/javascript" charset="ISO-8859-1">
//<![CDATA[
tinyMCE.init({
/* General options */
language : "pt",
mode : "textareas",
theme : "advanced",
plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave,visualblocks",
/* Theme options */
theme_advanced_buttons1 : "newdocument,|,bold,italic,underline,strikethrough,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,|,insertdate,inserttime,preview,|,print,|,emotions,iespell,media",
/*theme_advanced_buttons3 : "save,tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",*/
/*theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft,visualblocks",*/
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
/* Example content CSS (should be your site CSS) */
content_css : "_js/tinymce-textarea/examples/css/content.css",
/* Style formats */
style_formats : [
{title : 'Bold text', inline : 'b'},
{title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
{title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
{title : 'Example 1', inline : 'span', classes : 'example1'},
{title : 'Example 2', inline : 'span', classes : 'example2'},
{title : 'Table styles'},
{title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
],
/* Replace values for the template plugin */
template_replace_values : {
username : "second",
staffid : "991234"
}
});
//]]>
</script>
<?php
if(isset($_GET['cadastra']) && $_GET['cadastra'] == 'true'){
$textarea = $_POST['textarea'];
if($textarea == ""){
print"
<div class=\"msg_erro\">
<ul><li>Digite um texto por favor.</li></ul>
</div><br />
";
}else{
$AllAdmin->addTeste($_POST);
print"
<div class=\"msg_confirm\">
<ul><li>Texto inserido com sucesso.</li></ul>
</div><br />
";
}
}
?>
<form id="cadastra_email" action="reload.php?load=ajuda&cadastra=true" method="post" enctype="multipart/form-data">
<p>Teste até:</p>
<textarea name="textarea" id="textarea"></textarea>
<p>
<input type="submit" value="Cadastrar" />
</p>
</form>
</body>
3º)CLASS QUE FAZ A INSERÇÃO NO BD:
public final function addTeste($VARS) {
/*$VARS = Tools::trataUtf8Form($VARS);*/
/*$VARS["textarea"] = utf8_decode($VARS["textarea"]);*/
/*$responde = utf8_decode($responde);*/
if ($this->sql->insertSQL($VARS, $this->tblTeste)) {
return true;
} else {
return false;
}
}
OBS: As partes comentadas foram as formas que tentei p/ corrigir o problema.
Na verdade eu utilizo jQuery p/ passar as variáveis, aí pensei que o problema era este. Então decidi tentar fazer tdo via PHP e o problema continuou.
HELP :huh:
=========================================================
Galera, descobri o problema. Agora só falta eu conseguir a solução hehehe :rolleyes:
Seguinte...
Acontece que o TinyMCE não utiliza o formato UTF-8. Desta forma, por isto não estava decodificando com o utf8_decode.
Agora o problema é descobrir qual formato de codificação o TinyMCE utiliza? :wacko:
Ja tive este problema, um header
header("http-equiv=Content-Type content=text/html; charset=utf-8");
resolveu o problema
>
Ja tive este problema, um header
header("http-equiv=Content-Type content=text/html; charset=utf-8");
resolveu o problema
Opa, já tentei isto mano.. Aonde insiro este cód? Na página que recebe os dados do form e faz o insert, certo? :ermm:
>
Opa, já tentei isto mano.. Aonde insiro este cód? Na página que recebe os dados do form e faz o insert, certo? :ermm:
isso mesmo, na página que recebe, e como é um header(), no topo da página.
a variavel $VARS não deve ser usada assim $VARS["textarea"] ?? para pegar oque esta dentro do textearea ?
Já tentei isto kara
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
mas tbm ñ deu certo mano..
Já tentei o
header("http-equiv=Content-Type content=text/html; charset=utf-8");
também, porém ñ deu certo mano..
Kara, a impressão que dá, e acho que é o problema, é que o TinyMCE ñ utiliza a codificação UTF-8.
Porque veja bem, fiz alguns testes, olha só:
Apenas retirei o TinyMCE e deixei no formulário(textarea) normal, e inseri no bd.
Ele inseriu a palavra normalmente(no caso a palavra: até).
Aí, eu coloqueo o seguinte cód p/ codificar a variável na hora de inserir no bd:
public final function addTeste($VARS) {
$VARS["textarea"] = utf8_encode($VARS["textarea"]);
if ($this->sql->insertSQL($VARS, $this->tblTeste)) {
return true;
} else {
return false;
}
}
E ele inseriu no banco esses caracters: até
E quando retiro o utf8_encode e faço o insert utilizando o inyMCE (sem utf8_encode), ele insere estes caracters no BD:
<p>até</p>
Ou seja, ao que parece, o inyMCE ñ utiliza a codificação utf8. Pois caso assim fosse, os caracters teriam que ficar da mesma forma.
Certo? :huh:
utilizo tinyMCE em diversos projetos e nunca tive esse tipo de problema.
inclusive, em muitos dos proejtos está sob configuração padrão..
saiba mais sobre como configurar o ambiente:
http://forum.imasters.com.br/topic/340459-php-html-mysql-charset-encoding/
Olá hinom,
e como está configurado o seu banco de dados?
O meu está como:
Charset = utf8
Collation = utf8_general_ci
E outro detalhe é como está utilizando a tag:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
?
o link do post #7..
Para que fique registrado e ajudar alguém no futuro: DESCOBRI A SOLUÇÃO!!! :yes: Não sei se é a forma correta de se fazer, mas funcionou!
Utilizei a função html_entity_decode antes da função que trata UTF-8:
$VARS["materia"] = html_entity_decode($VARS["materia"]);
$VARS = Tools::trataUtf8Form($VARS);
OBS: Segue a função trataUtf8Form para caso alguém não tenha:
public final function trataUtf8Form($p_texto) {
$s_array = (array_keys($p_texto));
foreach ($s_array as $s_var) {
$p_texto[$s_var] = utf8_decode($p_texto[$s_var]);
}
return $p_texto;
}
Aí funcionou!!! Perfeito!! :yes: Obrigado pelas diacas aew pessoal!!!
OBS: Ao utilizar o CKEditor também encontrei o mesmo problema, e consegui resolver da mesma forma!!!
bom que resolveu..
apenas saliento que isso não é "a solução"
é um forma que vc encontrou para resolver um problema específico seu.
o problema original persiste.. vc apenas varreu para debaixo do tapete...
mas, tudo bem, com o tempo vc entenderá.
Já tentou fazer isso?... (Linha 6)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />