tmwh Posted August 6, 2013 at 10:57 PM Report #521032 Posted August 6, 2013 at 10:57 PM Boa noite a todos. Estou com um problema que passo a explicar: Tenho um formulário feito em flash Envio os dados por POST para o script PHP O PHP insere os dados em BD. Os dados surgem corrompidos na BD por problemas de acentuação. O problema não está no PHP pois se em vez de usar a variável recebida do formulário: $nome=ucwords(strtolower($_POST['nome'])); usar uma definida no PHP: $nome="mário"; aparece correcto na BD. O problema estará por isso no envio do flash para php. Cumps..
NunoDinis Posted August 7, 2013 at 04:44 PM Report #521116 Posted August 7, 2013 at 04:44 PM utiliza o utf8_encode($nome) e utf8_decode($nome). Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro. ndsotware.org
tmwh Posted August 8, 2013 at 12:02 AM Author Report #521170 Posted August 8, 2013 at 12:02 AM Boas Nuno. Desde já obrigado pela resposta. Utilizo utf8_encode($nome) dentro do flash e utf8_decode($nome) no php?
MoshMage Posted August 8, 2013 at 10:09 AM Report #521192 Posted August 8, 2013 at 10:09 AM (edited) utiliza o utf8_encode($nome) e utf8_decode($nome). Boas Nuno. Desde já obrigado pela resposta. Utilizo utf8_encode($nome) dentro do flash e utf8_decode($nome) no php? Não. Fazes o utf8_encode($nome) antes de enviar para a base-de-dados e o utf8_decode() quando puxas os dados da base-de-dados Edited August 8, 2013 at 10:11 AM by MoshMage If all Else fails, use Else If;
tmwh Posted August 8, 2013 at 10:39 AM Author Report #521199 Posted August 8, 2013 at 10:39 AM (edited) Boas MoshMage. Vou tentar e depois digo qual o resultado. Edited August 8, 2013 at 10:50 AM by tmwh
NunoDinis Posted August 8, 2013 at 11:43 AM Report #521218 Posted August 8, 2013 at 11:43 AM Não. Fazes o utf8_encode($nome) antes de enviar para a base-de-dados e o utf8_decode() quando puxas os dados da base-de-dados Subscrevo. Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro. ndsotware.org
tmwh Posted August 8, 2013 at 02:40 PM Author Report #521228 Posted August 8, 2013 at 02:40 PM Boas. Testei várias situações e continua a não dar. Resumindo: esquecendo a parte do formulário em flash e tendo como ponto de partida html, php e mysql: para que consiga introduzir através do inserir.php a variável $nome = "anda lá" correctamente na BD, tenho de ter a BD, tabela e campo com a codificação utf8_general_ci e o index.html, inserir.php e ligacao.php com Europeu Ocidental (charset=iso-8859-1). Esta é a única forma de a variável ser correctamente guardada na BD. Voltando ao formulário em flash, pelo que andei a ler, o flash já faz a codificação em utf8 a menos que seja indicado para não o fazer. Considerando que introduzo no formulário "anda lá", se no inserir.php fizer: $nomeflash=ucwords(strtolower($_POST['nome'])); $nome=utf8_encode($nomeflash); surge na BD "Anda Lã¡". $nomeflash=ucwords(strtolower($_POST['nome'])); $nome=utf8_decode($nomeflash); surge na BD "Anda L?". $nome=ucwords(strtolower($_POST['nome'])); surge na BD "Anda Lã¡". Penso que o problema estará no modo em como estão a ser enviadas as variáveis do flash para o php.
acao Posted August 8, 2013 at 04:13 PM Report #521241 Posted August 8, 2013 at 04:13 PM boas fala um leigo na materia, mas se fizer um print_r antes de enviar os dados para a base dados já vê se os dados chegam bem. cumps acao
NunoDinis Posted August 8, 2013 at 06:00 PM Report #521257 Posted August 8, 2013 at 06:00 PM Qual é a codificação do teu ficheiro ? Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro. ndsotware.org
tmwh Posted August 8, 2013 at 09:44 PM Author Report #521288 Posted August 8, 2013 at 09:44 PM De qual ficheiro? Penso que indiquei tudo no meu comentário anterior mas volto a referir: O index.html, inserir.php e ligacao.php estão em Europeu Ocidental (charset=iso-8859-1). O index.html tem a chamada do inserir.php. Está tudo nesta codificação pois é a unica forma de funcionar a 100%, ou seja, os dados serem correctamente introduzidos na BD. Se aplicar um formulario feito em php e chamando pelo html tudo funciona na perfeição. Por isso penso que o problema reside no envio do flash para php.
MoshMage Posted August 9, 2013 at 09:38 AM Report #521316 Posted August 9, 2013 at 09:38 AM (edited) De qual ficheiro? Penso que indiquei tudo no meu comentário anterior mas volto a referir: O index.html, inserir.php e ligacao.php estão em Europeu Ocidental (charset=iso-8859-1). O index.html tem a chamada do inserir.php. Está tudo nesta codificação pois é a unica forma de funcionar a 100%, ou seja, os dados serem correctamente introduzidos na BD. Se aplicar um formulario feito em php e chamando pelo html tudo funciona na perfeição. Por isso penso que o problema reside no envio do flash para php. Faz um double-check na base-de-dado e ve se os campos para onde estás a enviar o texto estão em ISO8 ou se estão para outra lingua qualer. Edited August 9, 2013 at 09:38 AM by MoshMage If all Else fails, use Else If;
tmwh Posted August 9, 2013 at 11:17 AM Author Report #521339 Posted August 9, 2013 at 11:17 AM Boas MoshMage. Também já tinha referido que a Base de Dados, tabela, e os campos estão em utf8_general_ci. Cumps.
brunoais Posted August 9, 2013 at 01:55 PM Report #521353 Posted August 9, 2013 at 01:55 PM @tmwh Com ou sem BOM? Já agora, usa UTF-8 sem BOM. É o mais testado e sabe-se que funciona. Nota que isto não significa que o que usas não serve. Boas MoshMage. Também já tinha referido que a Base de Dados, tabela, e os campos estão em utf8_general_ci. E sempre estiveram dessa maneira? E a ligação? É tb em utf-8? "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
tmwh Posted August 9, 2013 at 09:15 PM Author Report #521389 Posted August 9, 2013 at 09:15 PM (edited) @tmwh Com ou sem BOM? Já agora, usa UTF-8 sem BOM. É o mais testado e sabe-se que funciona. Nota que isto não significa que o que usas não serve. E sempre estiveram dessa maneira? E a ligação? É tb em utf-8? Com ou sem BOM??? agora estou perdido Andei a pesquisar na BD do servidor online e existe uma mistura de codificações. Deve ser por isso que está a dar o berro. Como mudo isto tudo para utf8? Edited August 10, 2013 at 03:57 PM by tmwh
brunoais Posted August 10, 2013 at 07:32 AM Report #521403 Posted August 10, 2013 at 07:32 AM (edited) http://en.wikipedia.org/wiki/Byte_order_mark Qual é a driver que usas para comunicar com a DB? (Se n sabes, indica a função/Objecto que usas) Edited August 10, 2013 at 08:11 AM by brunoais "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
tmwh Posted August 10, 2013 at 03:15 PM Author Report #521411 Posted August 10, 2013 at 03:15 PM (edited) Boas. Tenho um script ligacaotabela.php codificado em utf8 com o seguinte código: <?php $hostname_ligacaotabela = "localhost"; $database_ligacaotabela = "registo"; $username_ligacaotabela = "root"; $password_ligacaotabela = "pass"; $ligacaotabela = mysql_pconnect($hostname_ligacaotabela, $username_ligacaotabela, $password_ligacaotabela) or trigger_error(mysql_error(),E_USER_ERROR); ?> Para inserir na BD tenho um script inserir.php codificado em utf8 que recebe os dados do formulário em flash: <?php require_once('Connections/ligacaotabela.php'); ?> <?php $nome=ucwords(strtolower($_POST['nome'])); $sql = "INSERT INTO `registo`.`tabela` ( nome ) VALUES ( '$nome' )"; $sql = mysql_query($sql); //Aqui tenho uma função para enviar email para quem preencheu o formulário, que envia os dados introduzidos (nome) e está a enviar correctamente os dados, logo eles chegam correctos quando enviados do flash. Se for introduzido "joão" surge "João" no email, mas na BD aparece "João". O problema estará na introdução na BD. ?> Edited August 12, 2013 at 09:05 PM by brunoais geshi
tmwh Posted August 11, 2013 at 02:06 PM Author Report #521442 Posted August 11, 2013 at 02:06 PM (edited) Boas a todos. Consegui resolver o problema. Tinha a ver com a ligação à BD, pois pelo que percebi quando nada se indica, o mysql entende que o cliente vai realizar a ligação pelo charset de defeito "latin1". "The MySQL client programs mysql, mysqladmin, mysqlcheck, mysqlimport, and mysqlshow determine the default character set to use as follows: In the absence of other information, the programs use the compiled-in default character set, usually latin1." Fonte: http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html Para resolver isto temos de indicar qual o charset e codificação que vamos utilizar na ligação à BD. <?php # Informa qual o conjunto de caracteres será usado. header('Content-Type: text/html; charset=utf-8'); $hostname_ligacaotabela = "localhost"; $database_ligacaotabela = "registo"; $username_ligacaotabela = "root"; $password_ligacaotabela = "pass"; $ligacaotabela = mysql_pconnect($hostname_ligacaotabela, $username_ligacaotabela, $password_ligacaotabela) or trigger_error(mysql_error(),E_USER_ERROR); # Informa o charset a utilizar na ligação. 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'); ?> Não nos devemos esquecer de ter a BD, tabelas e campos codificados também em utf8. O mesmo se aplica para os scripts html e php utilizados. Apesar de estar a funcionar no servidor online, o mesmo não acontece no servidor local xammp, mas deve ser uma questão simples de resolver. Mais uma vez obrigado a todos. Edited August 12, 2013 at 10:26 PM by tmwh
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now