2009-04-21 10 views
0

J'ai une base de données, avec une table, avec un champ particulier qui a des descriptions de divers vêtements. Ces descriptions contiennent souvent des trémas ou des caractères similaires.affichage incohérent des accents utf8

Je récupère ces champs de deux champs php différents, et je ne fais rien aux données, mais il affiche de manière incohérente.

En fichier1, il affiche correctement comme il est ci-dessous, ou en ajoutant

$con->query("SET NAMES 'utf8'"); 

et

header("Content-Type: text/html; charset=utf-8"); 

Si j'ajoute que l'un des ci-dessus pour Fichier1, les données ne seront pas afficher correctement .

En fichier2, il affiche correctement que si

$con->query("SET NAMES 'utf8'"); 

est réglé.

Ajout soit

header("Content-Type: text/html; charset=utf-8"); 

en union avec les noms de requête ensemble, ou en laissant les noms de jeu sur requête provoquera à afficher de manière incorrecte.

$con->set_charset("utf8"); 

semble ne faire aucune différence à tout moment.

Ce problème existe sur Internet Explorer et Firefox sur Windows et Linux.

Un exemple de données qui affiche d'une manière incompatible:

ED HARDY SCHUHE IM JAPAN-STYLE, GRÖßE 36 

File1:

<?php 
header("Content-Type: text/html; charset=utf-8"); 
if (isset($_GET["pk"])) { 
    $pk = $_GET["pk"]; 
} 
$con = mysqli_connect("localhost","user","password", "database"); 
if (!$con) { 
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); 
    exit; 
} 
$con->query("SET NAMES 'utf8'"); 
$retreiveQuery = 'SELECT ARTICLE_NAME FROM AUCTIONS WHERE ARTICLE_NO = ?'; 
if ($getRecords = $con->prepare($retreiveQuery)) { 
    $getRecords->bind_param("s", $pk); 
    $getRecords->execute(); 
    $getRecords->bind_result($ARTICLE_NAME); 
    while ($getRecords->fetch()) { 
     echo "<h1>".$ARTICLE_NAME."</h1>"; 
    } 
} else { 
    print_r($con->error); 
} 

File2:

<?php 
header("Content-Type: text/html; charset=utf-8"); 
if (isset($_GET["brand"])) { 
    $brand = $_GET["brand"]; 
} 
$con = mysqli_connect("localhost","user","pass", "database"); 
if (!$con) { 
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); 
    exit; 
} 
$con->query("SET NAMES 'utf8'"); 
$brand = '%' . $brand . '%'; 
$rows = getRowsByArticleSearch($brand); 
echo "<table border='0' width='100%'><tr>" . "\n"; 
foreach ($rows as $row) { 
    $pk = $row['ARTICLE_NO']; 
    echo '<tr id="article_' . $pk . '">' . "\n"; 
    echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\', \'' . $title . '\', \'' . $pg . '\')">'.$row['ARTICLE_NAME'].'</a></td>' . "\n"; 
    echo '</tr>' . "\n"; 
} 
echo "</table>\n"; 
function getRowsByArticleSearch($searchString) { 
    $con = mysqli_connect("localhost","user","pass", "db"); 
    $recordsQuery = "SELECT ARTICLE_NAME FROM AUCTIONS WHERE lower(ARTICLE_NAME) LIKE ? and SUBCAT='' LIMIT 0,20"; 
    if ($getRecords = $con->prepare($recordsQuery)) { 
     $getRecords->bind_param("s", $searchString); 
     $getRecords->execute(); 
     $getRecords->bind_result($ARTICLE_NAME); 
     $rows = array(); 
     while ($getRecords->fetch()) { 
      $row = array(
          'ARTICLE_NAME' => $ARTICLE_NAME, 
         ); 
      $rows[] = $row; 
     } 
     return $rows; 
    } else { 
     print_r($con->error); 
    } 
} 

j'ai un Ajax applicaition, avec index.php, pour que j'ai défini

header("Content-Type: text/html; charset=utf-8"); 

Ensuite, je charge une couche avec du contenu via ajax en utilisant fichier2, qui affiche les données de façon incorrecte. Les données deviennent un lien, qui utilise file1 pour charger les données dans une autre couche, qui affiche correctement les données. Je ne comprends vraiment pas d'où vient l'incohérence.

modifier:

correctement les écrans de données dans fichier1 avec les noms de jeu et les en-têtes définis, et la page en utf-8.

Le fichier 2 affiche uniquement les données correctement lorsque les informations de la page Web indiquent que le jeu de caractères est ISO-8859-1, ce qui signifie l'omission des noms de jeu et la définition de l'en-tête.

+0

cela a été demandé avant! vérifier ici: http://stackoverflow.com/questions/346531/utf8-problem-with-mysql-5/346552#346552 – markus

Répondre

0

Assurez-vous que les fichiers sont enregistrés dans le codage utf8, et pas autre chose. Cela peut probablement être fait via votre IDE ou votre éditeur de texte. C'est à dire.Eclipse, vous pouvez choisir Edition-> Définir le codage

(Je dirais que file2.php ou index.php est enregistré avec un autre encodage)