[Résolu] MySQL fait-il du véritable UTF-8 ?

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Bobe
Iguane
Messages : 742
Inscription : 28 juil. 2003, 21:29

Message par Bobe »

GizMecano a écrit :En effet, alors que j'ai strictement suivi pas à pas ton message et recopier ton code, voilà ce que j'obtiens :
Firefox a écrit :Fatal error: Cannot instantiate non-existent class: mysqli in c:\program files\easyphp\www\test\index.php on line 3
Ah ok, désolé, je t’ai donné sans réfléchir du code utilisant l’extension mysqli de PHP5 (sensément plus pratique que l’extension classique mysql si on utilise MySQL 4.1.x et qu’on dispose bien entendu de PHP5).

Le même en PHP4 avec l’extension mysql :

Code : Tout sélectionner

<?php
/* le script doit être en utf-8 (pour les données de la requète insert, ou sinon, fais un utf8_encode() sur les données avant de les insérer */
mysql_connect('localhost', 'user', 'pass');
mysql_select_db('dbname');

/* Vérification de la connexion */
if (mysql_errno()) {
   printf("Echec de la connexion : %s\n", mysql_error());
   exit;
}

mysql_query("SET NAMES 'utf8'");

mysql_query("INSERT INTO table_test (texte) VALUES('Ceci est un test de la gestion de l\'utf-8 par MySQL é è € à ß')");

$result = mysql_query("SELECT texte FROM table_test LIMIT 1");
$row = mysql_fetch_array($result);

header('Content-Type: text/plain; charset=UTF-8');
echo $row['texte'];
exit;

?>
GizMecano a écrit : Bon, prochaine étape, essayer de comprendre à quoi sert réellement cette fonction header() que tu places en fin de code, là où je me contentais d'une balise meta, comme le signalait naguère Calimo.
Ça envoit un en-tête HTTP au navigateur, en l’occurence pour indiquer quel type de contenu (et le jeu de caractère des données dans le cas présent) on envoit (ici, du texte brut et non du html, d’où la necéssité d’envoyer cet en-tête).
GizMecano a écrit :
PS : En passant, comment tu obtiens de véritable apostrophe dans tes messages sur le forum ?
Touche `compose` + `'` + `>` (Je suis sur Ubuntu Linux)
« La vie d’un geek est un combat perpétuel contre l’imperfection »
GizMecano
Lézard à collerette
Messages : 416
Inscription : 02 août 2004, 20:27

Message par GizMecano »

Hello,
Bobe a écrit :Ah ok, désolé, je t’ai donné sans réfléchir du code utilisant l’extension mysqli de PHP5 (...).
Je me disais aussi : ça m'étonnait que ça puisse fonctionner nickel chez toi et me faire une si grosse erreur chez moi :wink:

Bobe a écrit :Ça envoit un en-tête HTTP au navigateur, en l’occurence pour indiquer quel type de contenu (...) on envoit (...).
Question très naïve : est-ce totalement obligatoire ? Je pose la question, parce que, avec ce que j'ai actuellement, ça fonctionne tout à fait bien. J'imagine que c'est bien plus précis que la balise meta, c'est ça ?

Sinon, même si c'est hors sujet de ce fil, j'en profite pour demander (vu que je ne trouve pas par ailleurs) : est-ce que c'est aussi la fonction header() qu'on peut renvoyer une chaîne à mettre dans la balise <title> ? Je sais, ça doit être tellement évident que c'est pour ça que je ne trouve rien :oops:

Bobe a écrit :Touche `compose` + `'` + `>` (Je suis sur Ubuntu Linux)
Dommage que Windaube en semble incapable :?
Au fait, c'est quoi la touche 'compose' ?


Encore merci.

Ciao,

PS : Je devrais peut-être changer le titre de ce fil, non ?
GizMecano.net
http://gizmecano.net
Bobe
Iguane
Messages : 742
Inscription : 28 juil. 2003, 21:29

Message par Bobe »

GizMecano a écrit :
Bobe a écrit :Ça envoit un en-tête HTTP au navigateur, en l’occurence pour indiquer quel type de contenu (...) on envoit (...).
Question très naïve : est-ce totalement obligatoire ?
Si tu envoies du html, non car c'est le type de contenu qu'envoit php par défaut. Mais ça ne coûte rien de l’ajouter, d’autant que ça permet également de préciser l’encodage (charset) des données qu’on envoit.
Je pose la question, parce que, avec ce que j'ai actuellement, ça fonctionne tout à fait bien. J'imagine que c'est bien plus précis que la balise meta, c'est ça ?
Oui. Et la balise meta est spécifique à HTML. PHP est généralement utilisé pour la génération de pages HTML, mais on peut tout aussi bien envoyer du texte brut (ce que j’ai fait dans le fichier de test), du XML, du contenu binaire (images, pdf générés à la volée, etc), ou autres…
Sinon, même si c'est hors sujet de ce fil, j'en profite pour demander (vu que je ne trouve pas par ailleurs) : est-ce que c'est aussi la fonction header() qu'on peut renvoyer une chaîne à mettre dans la balise <title> ?
Non, ça n’a rien à voir.
Dommage que Windaube en semble incapable :?
Au fait, c'est quoi la touche 'compose' ?
Chez moi, c’est la touche windows (faut bien qu’elle serve à quelque chose) :lol:

Sinon, essai avec alt+0146 (en gardant alt appuyé quand tu tapes les chiffres au pavé numérique).
« La vie d’un geek est un combat perpétuel contre l’imperfection »
GizMecano
Lézard à collerette
Messages : 416
Inscription : 02 août 2004, 20:27

Message par GizMecano »

Hello,
Bobe a écrit :Mais ça ne coûte rien de l’ajouter, d’autant que ça permet également de préciser l’encodage (charset) des données qu’on envoit.
D'accord. Mais si je fais plusieurs requêtes sur une même page, est-ce que je peux placer plusieurs fois cette fonction sans risque d'avoir un message me disant que le header a déjà été envoyé :?:
Bobe a écrit :Non, ça n’a rien à voir.
Bon, je sais que ça n'a rien à voir avec ce fil, mais est-ce que tu ne pourrais pas me donner un ou deux mots-clefs, voir une page de référence, parce que je ne dois pas chercher au bon endroit :roll:
Bobe a écrit :Sinon, essai avec alt+0146 (en gardant alt appuyé quand tu tapes les chiffres au pavé numérique).
Encore faudrait-il que j'ai un pavé numérique :wink:

Hélas, je suis parti pour écrire avec des apostrophes droites... :(

Merci pour tout.

Ciao,
GizMecano.net
http://gizmecano.net
Bobe
Iguane
Messages : 742
Inscription : 28 juil. 2003, 21:29

Message par Bobe »

GizMecano a écrit :
Bobe a écrit :Mais ça ne coûte rien de l’ajouter, d’autant que ça permet également de préciser l’encodage (charset) des données qu’on envoit.
D'accord. Mais si je fais plusieurs requêtes sur une même page, est-ce que je peux placer plusieurs fois cette fonction sans risque d'avoir un message me disant que le header a déjà été envoyé :?:
:?
J’ai l’impression qu’il y a confusion avec le début du sujet.
header() ne fait qu’envoyer des en-têtes http au client (navigateur, ...) pour lui indiquer la nature des données qu'il lui envoit et quelques autres informations. Cela n’a aucun rapport avec mysql.

Maintenant, oui, tu peux utiliser plusieurs fois la fonction header() dans ta page pour envoyer différents en-têtes par exemple, ou pour remplacer un même en-tête précédemment envoyé.
Bobe a écrit :Non, ça n’a rien à voir.
Bon, je sais que ça n'a rien à voir avec ce fil, mais est-ce que tu ne pourrais pas me donner un ou deux mots-clefs, voir une page de référence, parce que je ne dois pas chercher au bon endroit :roll:
La question n’a pas de sens pour moi, c’est pour ça que j’ai répondu ça.
Mais si tu veux une réponse:

Code : Tout sélectionner

echo "<title>Le titre de la page</title>";
Je ne sais pas si c’est la réponse que tu attendais, ça fait partie des bases de php.
« La vie d’un geek est un combat perpétuel contre l’imperfection »
GizMecano
Lézard à collerette
Messages : 416
Inscription : 02 août 2004, 20:27

Message par GizMecano »

Hello,
Bobe a écrit :J’ai l’impression qu’il y a confusion avec le début du sujet. header() ne fait qu’envoyer des en-têtes http au client (navigateur, ...) pour lui indiquer la nature des données qu'il lui envoit et quelques autres informations. Cela n’a aucun rapport avec mysql.
J'avais compris. Je me demandais seulement si, dans les différentes requêtes PHP, le fait de répéter cette fonction posait problème. A priori, si je te suis, il semble que non (et d'après les premiers tests que j'ai fait, ça semble coller).
Bobe a écrit :La question n’a pas de sens pour moi, c’est pour ça que j’ai répondu ça.
Effectivement, je m'étais mal exprimé... Ce que je cherche, c'est la méthode qui permet d'écrire un titre variable entre les balises <title> selon les différentes variables reçues. En plus clair, le moyen de ne pas avoir toujours le même titre. Mais je finirais par trouver...

Merci quand même...

Ciao,
GizMecano.net
http://gizmecano.net
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : debian-dev et 2 invités