Bonjour,
Je débute et je me pose bcp de question et j'ai du mal à trouver une réponse sur le net.

- Dans phpmyadmin on définit les interclassent (l'ordre de tri) mais jamais le format de codage?

- dans une base sous quel format je dois mettre mes données? (a priori si je mets des accents des ' ou des " ) et que je charge en set name iso-8859-1 tout passe bien.

je me pose la question de l'utilité des \' ou des &xx;

Pour le moment j'ai fait des copier/coller direct sous phpmyadmin genre word->mysql et tout semble passer même les caractères spéciaux

Bref il faut continuer comme ça ou alors utiliser le codage spécifique? Et si je comprend bien selon si je décide d'être en iso-8859-1 ou utf8 je coderais pas de la même façon mes caractères accentuées ou spéciaux.

Dans ce cas existe-il un moyen(logiciel) de taper un texte de manière conventionnel) puis de le transformer dans le code voulu?

Merci
Modifié par maika (04 Aug 2010 - 22:41)
Hello maika et bienvenue, Smiley smile

(sujet déplacé dans le bon salon)

comme je n'ai pas beaucoup de temps pour développer je t'invite à lire :
Jeux de caractères mysql
Comment bien déclarer l'encodage des caractères d'une page

Il n'y a pas besoin de s'inquiéter des quotes ou de sauvegarder des entités html dès lors que tout est bien déclaré dans le même encodage (pour ce qui est de protéger les données des injections SQL il faut soit utiliser mysql_real_escape_string soit, si tu utilises PDO, utiliser des requêtes préparées).

Bonne lecture. Smiley cligne
maika a écrit :
- Dans phpmyadmin on définit les interclassent (l'ordre de tri) mais jamais le format de codage?

Le choix de l'interclassement définit le codage. Un interclassement utf8_general_ci suppose un codage en UTF-8.

À noter que c'est une information déclarative. Ça n'empêche pas d'envoyer des données non-UTF8 à MySQL. Cette information implicite de codage est utilisée par MySQL pour faire des conversions à la volée, par exemple si les données sont indiquées comme étant en UTF-8 et que la connexion entre le client (Apache+PHP par exemple) et le serveur (MySQL) est en ISO-8859-1, MySQL va convertir les données de UTF-8 vers ISO-8859-1. Si les données en base étaient bien en UTF-8, on obtient de l'ISO-8859-1 (et des problèmes pour les carractères non existant dans ce codage...). Si les données n'étaient pas en UTF-8, on obtient des données corrompues.

Attention à phpMyAdmin: c'est une application cliente, qui ouvre une connexion avec la base de données MySQL, avec un codage donné pour cette connexion. Donc les données que tu vois dans phpMyAdmin peuvent déjà être des données converties ou corrompues (suivant les réglages exacts et la nature des données stockées).

Pour le reste, quelques pistes:
1. Fais de l'UTF-8 partout. Fichiers en UTF-8, données en base en UTF-8, interclassement utf8_unicode_ci, connexion MySQL en UTF-8 (via un SET NAMES qui va bien, ou configuration globale du serveur), pages HTML avec <meta> déclarant de l'UTF-8, et en-tête HTTP Content-Type déclarant de l'UTF-8 aussi.
2. N'utilise pas les entités HTML &eacute; &#...;, etc. Tu n'en as à priori pas besoin si tu suis le premier conseil.
3. Les seuls traitements de tes données à faire avant d'envoyer les données en base, c'est de lutter contre les injections de code SQL, et éventuellement le Cross-Site Scripting. Donc des mesures de sécurité, mais pas de mesures particulières pour s'assurer que les caractères «spéciaux» s'affichent correctement (en passant, aucun caractère n'est plus spécial qu'un autre). Le bon affichage des caractères devrait être réglé par l'étape (1) ci-dessus.
Ok. J'ai essayé de tout mettre en utf-8 sous "phymyadmin".
j'ai fait un test je copie/colle un texte en japonais depuis un site japonais.

1)je le mets direct dans ma page html (sous dreamweaver en spécifiant un codage utf8).
=> cool ça marche à l'affichage web.
2)Je le colle avec phpmyadmin dans ma base et l'appelle avec un mysql_query("SET NAMES 'utf-8'")
=> j'ai des points d'intérogation
3)je passe ma page html en occidentale sous dreamweaver j'ai un code du type "&#27770;&#31639" je mets ça dans la Base et là ça marche.

A votre avis pourquoi le point 2 marche pas.

Merci
Modifié par maika (04 Aug 2010 - 18:13)
maika a écrit :
A votre avis pourquoi le point 2 marche pas.

Deux possibilités:
1. Tes données ne sont pas en UTF-8 dans la base.
2. Tes données sont en UTF-8 dans la base mais une conversion se fait, par exemple parce que tes tables ou colonnes sont marquées en latin1_swedish_truc, ou parce que ta connexion n'est pas en UTF-8 (SET NAMES fait au mauvais moment).
Si tu as bien
mysql_query('SET NAMES UTF8');
avant d'effectuer la récupération c'est sans doute que ta table n'est pas bien créée.

Un petit test :
CREATE TABLE `testutf8` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `texte` text NOT NULL,
  PRIMARY KEY  (`id`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

INSERT INTO `testutf8` (`id`, `texte`) VALUES 
(1, '&#32946;&#12513;&#12531;”&#12479;&#12524;&#12531;&#12488;&#24847;&#35672;&#35519;&#26619;'),
(2, '&#32946;&#12513;&#12531;”&#12479;&#12524;&#12531;&#12488;&#24847;&#35672;&#35519;&#26619;');
(Arf ! Les caractères japonais ne passent pas sur le forum : à remplacer donc).

Edit: d'ailleurs il devrait suffire de vérifier que tu as le bon interclassement (ou collation) dans la structure via phpMyAdmin :
upload/8634-structureut.jpg
Modifié par Heyoan (04 Aug 2010 - 19:46)
Merci ça marche, je ne sais pas trop ce que j'ai fait j'ai remplacé des utf-8 par des utf8 mais je ne crois pas que ça soit ça.
Mais j'ai aussi modifier 2-3 petites autres choses entre temps.