2010-07-17 6 views
2

Sur un serveur web, j'ai un script PHP qui analyse un fichier .sql (qui est stocké directement sur le serveur), et exécute les requêtes sur une base de données mysql. J'ai beaucoup de caractères français qui n'insèrent pas bien: é devient à ©.PHP - Analyser un fichier uft-8 et l'insérer dans la base de données désactive les caractères spéciaux comme é

Quand j'ouvre le fichier sql avec notepad ++, je vois que le codage est « UFT-8 sans BOM ».

Mon script ressemble à ceci:

$handle = fopen("test.sql", "r") or die("couldn't get handle"); 
if ($handle) 
{ 
    while (!feof($handle)) 
    { 
     $buffer = fgets($handle, 4096); 
     if (strlen ($buffer) < 3) // if we have a blank line 
     {  
      mysql_query($query); 
      $query = $buffer; 
      sleep(0.5); 
     } 
     else 
     { 
      $query .= $buffer; 
     } 
    } 
    mysql_query($query); // last insert 
    fclose($handle); 
} 

Quand j'ouvre la base de données via phpmyadmin, je vois que les caractères spéciaux sont déjà cassés juste après l'exécution du script.

Répondre

3

Vous devrez peut-être exécuter « NOMS Utf8 » avant de faire l'insert, parce que MySQL est tellement hilarante squameuse sur l'encodage de caractères. Oui, même si votre base de données a déjà été définie pour utiliser le codage de caractères UTF-8 et le classement général-utf8-ci.

http://forums.mysql.com/read.php?103,46870,46870#msg-46870

+0

wow merci beaucoup! travaillé parfaitement – Phillaf

1

Au lieu de cela, vous devez utiliser la fonction mysql_set_charset et pas un ensemble NOMS requête, comme décrit à http://www.php.net/manual/en/function.mysql-set-charset.php

Même si votre base de données est en UTF-8 et offres de PHP en UTF-8, la connexion établie par défaut est probablement une connexion latin-1, alors MySQL va essayer de convertir les données même si elle ne devrait pas

+0

Nice! comme l'état de la note: « Note:.. Ceci est la meilleure façon de changer le jeu de caractères utilisant mysql_query() pour exécuter NOMS SET .. n'est pas recommandé » En ce moment, je pense que je n'ai pas une version assez récente de mysql, mais je m'en souviendrai certainement quand je le mettrai à jour. merci beaucoup. – Phillaf