Base de données encoding

WRInaute passionné
Bonjour,
J'ai une base avec des caractère du genre 阿尔及利亚 ou é
au lieu de 非洲 ou é par exemple

Alors ça s'affiche très bien sur le site, jamais eu de probème.

En revanche ma question est : est ce que les moteurs de recherche indexent correctement et est que je peux ressortir correctement sur une requête comme 非洲 ou avec des accents ?

Merci
 
WRInaute passionné
Et éventuellement connaitriez-vous un programme pour convertir les base en UTF8 AVEC leur contenu ?

Merci beaucoup
 
WRInaute accro
Enregistrer des entités HTML dans la DB n'a jamais été une bonne idée.

Pour convertir entités HTML:
PHP:
<span class="syntaxdefault"><br /></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br /></span><span class="syntaxkeyword">echo&nbsp;</span><span class="syntaxdefault">html_entity_decode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'&#38463;&#23572;&#21450;&#21033;&#20122;'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">ENT_COMPAT</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'UTF-8'</span><span class="syntaxkeyword">);<br />&nbsp;</span><span class="syntaxdefault"></span>
Démo: http://codepad.org/O4yTqGWQ

Pour convertir une DB de Latin1 => UTF8
Code:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
 
WRInaute passionné
Alors tu vois j'ai fais un petit script pour passer des élément de ma base en vrai caractères :

et j'ai avant passé ma table en utf8_general_ci

Code:
$convert=mysql_query("SELECT compteur, nom_zh FROM wpa_cat LIMIT 25",$db);
$nbr=mysql_num_rows($convert);				

for ($i=1; $i<=$nbr; $i++)
	{
	$list=mysql_fetch_row($convert);
	
	$convertedstring=html_entity_decode($list[1], ENT_COMPAT, 'UTF-8');
	
	$query="UPDATE wpa_cat SET nom_zh=\"$convertedstring\" WHERE compteur='$list[0]'";
	$res_modif=mysql_query($query,$db);
	
	
	}

Donc je récupère les élément type &#38463;&#23572;&#21450;&#21033;&#20122; dans chaque case, je transforme avec ta formule et je réinsère, met ç me met des ??? dans les cases.

Une idée ?

Merci
 
WRInaute accro
Si tu as bien mis ta DB en UTF8, il ne faut pas oublier:
PHP:
<span class="syntaxdefault">mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SET NAMES 'utf8'"</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span>
Juste après la connexion.
 
WRInaute passionné
Non cela ne marche toujours pas.
Ma table est en utf8_general_ci

Et j'ai fais ce code rapide :

Code:
define('host', 'monserveur');

	define('user', 'user');

	define('pass', 'pass');

	define ('bdd', 'base'); $db = mysql_connect(host,user,pass); mysql_set_charset('utf8',$db); mysql_select_db(bdd, $db);
	
	mysql_query("SET NAMES 'utf8'"); 
	
$convert=mysql_query("SELECT compteur, nom_zh FROM wpa_cat LIMIT 30",$db);
$nbr=mysql_num_rows($convert);				

for ($i=1; $i<=$nbr; $i++)
	{
	$list=mysql_fetch_row($convert);
	
	$convertedstring=html_entity_decode($list[1], ENT_COMPAT, 'UTF-8');
	
	$query="UPDATE wpa_cat SET nom_zh=\"$convertedstring\" WHERE compteur='$list[0]'";
	$res_modif=mysql_query($query,$db);
	
	echo "$i ($convertedstring) - ";
	}

j'affiche le $convertedstring qui est bien en bon caractère
mais dans les cases de ma table il me met des "?????"

Vous n'avez pas une idée ?

Merci
 
WRInaute accro
si dans ta table il affiche des ???? c'est foutu : il va falloir reprendre tout à la main pour corriger.
bon courage !
 
WRInaute passionné
Impossible de reprendre tout à la main. Mais le site marche très bien comme ça.

C'est juste que ça aurait été plus carré avec tout en UTF8 !
 
WRInaute accro
donc les ???? n'apparaissent qu'à l'affichage sur phpmyadmin ? dans ce cas, il faut modifier l'encodage dans le paramétrage de phpmyadmin
 
WRInaute passionné
Mais ça viendrait de quoi, j'ai pourtant bien des bons caracère du type &#38463;&#23572;&#21450;&#21033;&#20122; dans ma base.
Je dois forcément pouvoir prendre la chaine, la transformer et la sauver correctement en base !

Merci si vous avez une piste, j'essai tout :)
 
WRInaute accro
Normalement ça devrait fonctionner:
1) ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8; => vérifier que c'est good dans ton client SQL, vérifier l'encodage de la DB aussi.
2) Moulinette PHP pour faire les html_entity_decode() /!\ le script PHP en UTF8 aussi.
 
Discussions similaires
Haut