8796 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

tatsu a écrit :
Toute mes pages sont créées en UTF-8, mon header spécifie que la page est encodée en UTF-8, et pourtant j'ai des caractères bizarres qui s'affichent quand je veux mettre un é ou è par exemple, ce dernier devenant è.
C'est un cas typique d'UTF-8 servi en tant que LATIN1 (ou ISO-8859-1 pour les intimes).

Puisque tu n'as pas d'autres problèmes sur tes autres pages on peut supposer que tout est bien en UTF-8 et que le problème vient seulement ce que tu récupères de la BDD.

Normalement ce que te proposais Planplan devrait suffire : faire juste après le mysql_select_db
mysql_query('SET NAMES UTF8');
pour préciser que la connexion se fait en UTF-8 et pas en LATIN1 (comme c'est généralement le cas par défaut)
J'ai bien essayé, mais pourtant ça ne change rien. Le début de mon code :
<?php

session_start();
header('Content-type: text/html; charset=utf-8');

/********Actualisation de la session...**********/

include('fonctions.php');
connexionbdd();
mysql_query('SET NAMES UTF8');
actualiser_session();
//reste du code...
?>

J'ai pareil sur toutes les autres pages (sauf pour le mysql_query('SET NAMES UTF8');)et ça marche. Là j'ai essayé en mettant votre fonction sur toutes les pages en rapport avec le sondage, ça ne change rien non plus.
Pourtant, dans la base de données, quand je regarde mes tables, elles n'ont aucun caractère bizarre. Devrais-je tenté de recréer ma base de données ?
Heyoan a écrit :
Attention : là tu parles de la collation (ou interclassement) ce qui n'est pas la même chose que l'encodage.

Oui, c'est vrai que c'est pas le bon terme, mais on s'est compris Smiley cligne


Pour en revenir au problème de tatsu, au début de ta page, tu as bien le code XHTML necessaire? Parce que la fonction PHP header(...) ne suffit pas toujours (rarement)...

Pour faire des tests plus rapides, créé une nouvelle page où tu gardes juste le minimum de code, une requête toute simple qui récupère 1 seul champ (qui pose problème si possible Smiley cligne ) et qui l'affiche, avec les bon header qui vont bien.

Quand tu dis que tu regardes les tables, c'est avec phpMyAdmin, ou autre logiciel du genre je suppose. Faut pas trop s'y fier...
Ca peut être une piste... Une fois j'ai eu un problème assez similaire. J'avais créé mes bases/tables/champs et rempli quelques champs, mais je me suis rendu compte que tout était en latin1. J'ai donc tout converti en utf8, sauf que ça marche pas si bien que ça...
http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

Essaye de relancer la création de toute la base, en prenant soin de bien spécifier le bon jeu de caractères et la collation qui correspond à tes attentes avant de tout lancer (j'arrive plus à retrouver le lien qui expliquait les différences entre les différentes collations, si quelqu'un a...).

MySQL Workbench peut te mâcher un peu le travail là si tu as besoin (en lui faisant importer le script de création actuel, puis en faisant les modifs dans le charset du schema, et en exportant).

Je doute que ce soit ton soucis... mais des fois...

Sinon, peut-être un problème de configuration quelconque...
Modifié par Planplan (04 Mar 2009 - 15:15)
Je viens de tester de faire une nouvelle page avec un code simple et semblable à celui que j'ai pour créer mes sondage. Donc voici le code :
<?php

session_start();
header('Content-type: text/html; charset=utf-8');

/********Actualisation de la session...**********/

include('fonctions.php');
connexionbdd();
mysql_query('SET NAMES UTF8');
actualiser_session();

/********Fin actualisation de session...**********/

?>

<?php include ('header.php'); ?>

<?php include ('menu.php'); ?>

<div id="contenu">
	<h1>test</h1>
	<form action="test.php" method="post">
	<label for="question" class="float">Question :</label>  
	<input type="text" name="question" value="<?php if (isset($_POST['question'])) echo stripslashes(htmlentities(trim($_POST['question']))); ?>"><br />
	<?php
	if (isset($_POST['go']) && $_POST['go']=='Valider') 
	{
		$sql = 'INSERT INTO sondage_questions VALUES("","'.mysql_real_escape_string($_POST['question']).'")'; 
		mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
		echo($_POST['question']);
	}
	?>
	<input type="submit" name="go" value="Valider">			
	</form>		
	</div>

<?php 

include ('footer.php'); 
mysql_close();

?>

Comme la question de mon header a été abordée, le voici également :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<title>Titre de mon site</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta http-equiv="Content-Style-Type" content="text/css" />
		<meta http-equiv="Content-Language" content="fr" />
		<link rel="stylesheet" href="style.css" type="text/css" />
		<link rel="shortcut icon" href="img/logo.ico" />
		<link rel="icon" type="image/png" href="img/logo.png" />
		<!--[if IE]>
		<style type="text/css">
		html pre {
			width: 636px ;
		}
		</style>
		<![endif]-->
	</head>
	<body>

Mon header est donc parfaitement aux normes normalement.
Maintenant ce qui m'intrigue, c'est le résultat que m'a afficher ma page de test. En effet, comme on peut le voir dans mon code, on crée une question, on envoie le formulaire qui s'affiche à nouveau avec la question affichée dans le input et juste avant le bouton "valider". Ce qui est dans le input est mal écrit, mais ce qui est juste avant le bouton est parfaitement bien écrit. (un petit screen pour vous montrer, je suis pas sûre bien m'exprimer : ) upload/19937-Sanstitre.JPG
Modifié par tatsu (04 Mar 2009 - 16:00)
Salut,

le stripslashes n'est à priori utile que si magic_quotes_gpc est activé (ce qui est rare de nos jours).

Quoi qu'il en soit il y a un problème avec htmlentities puisqu'il faut lui spécifier l'encodage :

* soit tu fais
echo htmlentities(trim($_POST['question']), ENT_QUOTES, "UTF-8" );
*soit (mieux encore) tu fais
echo htmlspecialchars(trim($_POST['question']));
J'avais pensé à quelque chose dans le genre en vous mettant le code ici. J'avais essayé d'enlever les fonctions htmlentities() et autres une par une, mais ça n'avait rien changé à ce moment-là. J'ai néanmoins réessayé et maintenant ça marche impec ^^

Merci beaucoup pour votre aide ! Mes sondage marchent super grâce à vous. Merci encore ! =)
Pages :