Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi,
Estou com um bug super estranho no mysql.
Fiz todas as configuraçoes para suportar utf8, tanto no banco de dados mysql como no script php.
No meu arquivo php tem essa funcao logo apos o connect com o banco de dados;
> 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');
Aí quando eu insiro, por exemplo:
$var="L’Enfant";
$inserirteste = mysql_query ("INSERT INTO `table_teste` (`teste`) values ('$var')");
Ele só insere o "L" o resto é inserido no registro.
O dado parece que está sendo truncado, pelo que vi esse é esse ’ < aspa que ta bugando...
Mas esse bug é realmente muito estranho.
Alguem sabe porque os dados estao sendo truncados dps daquela aspa esquisita? :upset: :upset:
Obrigado.
Configuraçao atual do bd e tabelas:
CREATE DATABASE teste CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_unicode_ci
DEFAULT COLLATE utf8_unicode_ci
;
USE teste;
CREATE TABLE `table_teste` (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
teste VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
E o script está sendo salvo corretamente na formatação utf8 sem BOOM.
Voce pode simular isso em seu banco de dados, e ver que o erro vai se manter. :(
Já está sendo usado a função antes do insert;
if(get_magic_quotes_gpc()){
$var=stripslashes($var);
}
$var = mysql_real_escape_string($var);
O dado ainda está sendo truncado.. :unsure:
Na verdade o problema está no CURL.
Que estava obtendo essa variavel de um site frances e está me retornando um black diamond aonde tem aquele apóstrofo estranho.
Porque o curl está me retornando os dados com black diamond onde tem special character?
Tentei setar um retorno no curl com
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8" );
mas nao funcionou, ainda volta com black diamond.
Imprime a query com o echo para ver como sai.
usa expressão regular pra remover qualquer caracter que você não deseja, ou melhor, deixe apenas os caracteres permitidos
ex.: [A-Za-z0-9] e se qzr manter a aspas pode também, mas tem que tratar a string do sql como dito anteriormente.
a aspas simples as vezes vem como um caractere diferente do padrão, principalmente copiando-o do word
>
Imprime a query com o echo para ver como sai.
Utilize o mysql_real_scape_string antes de mandar a $var para a query.
$var = mysql_real_escape_string($var);
http://php.net/manual/pt_BR/function.mysql-real-escape-string.php
Ve se funciona ai