Page 1 sur 2

Encodage caractères

Posté : 21 sept. 2014, 23:22
par jack in the box
Bonsoir,
depuis ce matin, je m'arrache ce qu'il me reste de cheveux...
J'ai fait un formulaire en PHP pour alimenter du BDB (hébergée chez LWS)
Les lettres accentuées de passent pas bien du tout...
Je me retrouve avec des ééééééééé à la place des ééééééé!!!
Pour les apostrophes, il faut en taper deux pour un avoir une, sinon message d'erreur...

Je crois avoir tout essayé (sans doute que non...)

Quelqu'un a la bonne méthode ?

Re: Encodage caractères

Posté : 22 sept. 2014, 07:58
par arnaud69
Bonjour
Ton formulaire est enregistré en quoi ? UTF8 ou iso8859 -(1|15) ?
Tu as des headers ?
Sinon, comme ça, un peu difficile ! #-o
BDB : du Berkeley ?? ou BDD ??

Re: Encodage caractères

Posté : 22 sept. 2014, 08:19
par xTG
Un guide très bien fait sur le sujet de l'encodage : faq-tutoriels/encodage-utf-t245062.html :)

Re: Encodage caractères

Posté : 22 sept. 2014, 12:01
par jack in the box
Bonjour, et merci pour ces réponses.
Mon formulaire est bien en UTF8, ainsi que le php qui récupère les données.
A ce stade les accentuées passent bien (vérifié).
Mais c'est la Base de données qui est en latin par défaut.
Je vois, ici ou là, des méthodes pour convertir la base de données.
Mais j'ai une BDD unique qui sert aussi à une site en WordPress.
J'hésite donc à convertir la base entière au risque de me retrouver avec des hiéroglyphes dans tout le site...
Il me faudrait convertir juste la table utilisée par le formulaire.
Je ne vois pas de méthode globale.
L'outil proposé par PHPMyadmin pour convertir vers UTF8 ne change rien au résultat, même pour les données nouvelles.
Peut-être faut-il créer une nouvelle table vide et la paramétrer convenablement avant d'y envoyer des données ?

Sinon plusieurs sites me disent que si je vois des A©A© c'est que le navigateur croit voir de l'ISO alors que la page est bien codé en UTF8.
Je comprends pas bien : mes données seraient bien codées, mais c'est mon Firefox qui m'afficherait des A©A©A© là où il y a en fait des ééé ?
Y compris dans la base elle-même sous PHPMyAdmin ?
Dans ce cas, sur d'autres machines, on y verrait bien des éééé ?
Alors, pouvez-vous me dire ce que vous voyez sur cette page : http://www.dream-catcher.fr/BDD/lire_o_jar.php ?

Juste que je comprenne un peu mieux... Merci.

Re: Encodage caractères

Posté : 22 sept. 2014, 14:00
par en_passant_bob
=; Chez moi avec Opéra et autres navigateurs !

Offres Jardin et Nature

n° d'adhérent : 1230 / mémé guérini / un trou
n° d'adhérent : 1 / fdfdfgd èèèèèèè / éééééé
n° d'adhérent : 1 / fdfdfgd èèèèèèè / éééééé
n° d'adhérent : 1 / fdfdfgd èèèèèèè / éééééé
n° d'adhérent : 1 / fdfdfgd èèèèèèè / éééééé
n° d'adhérent : 1 / fdfdfgd gérard / éééééé

Re: Encodage caractères

Posté : 22 sept. 2014, 14:15
par jack in the box
Merci.
Oui, comme moi, sauf que ...

Ici (au boulot, chuutt!) Firefox + Windows XP :
n° d'adhérent : 1230 / mémé guérini / un trou
n° d'adhérent : 1 / fdfdfgd èèèèèèè / éééééé
la lecture se fait en "occidental"
mais, en basculant l'affichage en "Unicode", j'ai :
n° d'adhérent : 1230 / mémé guérini / un trou
n° d'adhérent : 1 / fdfdfgd èèèèèèè / éééééé

A la maison, Firefox sur Windows7, j'ai beau basculer l'affichage en "Unicode" ça ne prend pas et ça revient automatiquement en "Occidental", donc :
n° d'adhérent : 1230 / mémé guérini / un trou
n° d'adhérent : 1 / fdfdfgd èèèèèèè / éééééé

Reste le problème de l'apostrophe : si j'en mets une seule, j'ai un msg d'erreur du php.
Il me faut en mettre 2 pour qu'il en arrive une seule sur la table. J'y comprends rien !

Re: Encodage caractères

Posté : 22 sept. 2014, 14:44
par moogli
salut,

1/ utilise une page html complète (html, head etc ) cela te permetteras d'y indiquer le charset de la page (<meta http-equiv="content-type" content="text/html; charset=UTF-8" />)
2/ tu peux y ajouter la même info dans l'entête http (via la fonction header) cela évitera de laisser supposer au navigateur du type d'encodage
3/ je suppose que c'est une erreur SQL que tu as et non une erreur php (effectivement c'est php qui te l'indique mais l'erreur c'est du SQL).
Pour éviter cela un te faut échapper correctement les ' (donc en sql en les doublant). CEla te permet d'aborder la notion de faille type injection SQL.

sans code on ne peux pas t'aider beaucoup plus. Je peux simplement te dire que tu dois foire un truc du genre :
<?php
$sql = 'insert into latable value('.$_POST['field1'].','.$_POST['field_2'].', ........)';
?>
ce qui est un le cas type permettant une injection sql.

par exemple si tu utilise mysql tu peux utiliser les fonctions
mysql_real_escape_string : si extension mysql (pas bien il est préférable d'utiliser mysqli ou pdo)
mysqli_real_escape_string : si tu utilises mysqli
PDO::quote : si tu utilise PDO

@+

Re: Encodage caractères

Posté : 23 sept. 2014, 08:50
par jack in the box
Bon, j'ai un peu avancé...
En mettant bien la déclaration du charset UTF8 dans toutes les requêtes, j'arrive à récupérer correctement toutes les lettres accentuées.
Sauf que sur PHPmyAdmin dans la table, c'est toujours des hiéroglyphes... mais bon, ça fonctionne...

Il me reste la question des apostrophes à bosser...
Si quelqu'un a quelque chose de simple et standard, je suis preneur.

Je vous tiens au courant pour la suite.

Re: Encodage caractères

Posté : 23 sept. 2014, 09:06
par arnaud69
Voilà, avant chaque requête tu passes donc SET NAMES UTF8.
L'analyse de l'avant projet, ah quelle belle idée ! C'est toujours après que l'on s'en rend compte... :lol: :lol:

Re: Encodage caractères

Posté : 23 sept. 2014, 09:11
par ynx
Salut,

Comme indiqué par Moogli, l'apostrophe est un caractère réservé en mysql, il faut donc le doubler pour l'utiliser dans une requête.
Mais tu ne devrais pas avoir à te soucier de ca si tu protège correctement tes données contre les injections sql.

Bonne journée

Re: Encodage caractères

Posté : 23 sept. 2014, 09:42
par jack in the box
Bonjour,
se protéger des injections sql ??? ça c'est chinois pour moi !

C'est en remplissant le formulaire que les utilisateurs vont mettre des apostrophes qui font tout planter.
Y a t-il un moyen de les doubler automatiquement ??

Le lien vers le formulaire, si vous voulez tester : http://www.dream-catcher.fr/BDD/formulaire.php
Puis le lien vers une requête : http://www.dream-catcher.fr/BDD/lire_o_jar.php

Re: Encodage caractères

Posté : 23 sept. 2014, 13:39
par xTG
ce qui est un le cas type permettant une injection sql.

par exemple si tu utilise mysql tu peux utiliser les fonctions
mysql_real_escape_string : si extension mysql (pas bien il est préférable d'utiliser mysqli ou pdo)
mysqli_real_escape_string : si tu utilises mysqli
PDO::quote : si tu utilise PDO
;)

Re: Encodage caractères

Posté : 23 sept. 2014, 15:47
par jack in the box
Oui, j'ai bien lu et même suivi les liens proposés plus haut par moogli...

Mais j'ai rien compris !
Va falloir que je prenne le manuel à la page 1 ...

Mais si quelqu'un avait une moulinette toute faite pour le coup de apostrophes ... :-)

Re: Encodage caractères

Posté : 23 sept. 2014, 17:28
par xTG
Euh pas page 1, la page de la fonction en question pour regarder les exemples et ainsi comprendre ce qu'elle fait est suffisant en fait. :twisted:

Re: Encodage caractères

Posté : 23 sept. 2014, 18:56
par jack in the box
Euh pas page 1, la page de la fonction en question pour regarder les exemples et ainsi comprendre ce qu'elle fait est suffisant en fait. :twisted:
C'est bien ça le problème...
J'ai surtout l'impression que tous ces exemples (que je pige à peine à moitié, d'accord...[d'où la réf à la page 1] ne s'appliquent pas à mon cas...

J'ai bien regardé le lien vers PDO::quote : je vois pas que ça me concerne, sauf que j'ai effectivement une instruction PDO dans la requête...
J'ai regardé "addslashes", sans comprendre si j'étais ou pas dans le champ possible d'application.

J'avais trouvé quelque part (mais où?? j'en ai tellement vu...) un bout de code qui recherchait les quote dans les chaines de variables et leur en ajoutait une seconde. Ce truc me plaisait bien, mais est-il adapté à mes requêtes, mystère ! De toute façon, je ne sais plus où c'est

Certains me parlent de me protéger des injections SQL, d'autres de faire les injections ... qui croire ?

Je me décourage un peu. Je trouvais que j'avais bien avancé en découvrant les bases de données MySQL, les formulaires et les requêtes, mais là je vois bien que c'est plus compliqué quand on entre un peu dans les détails... le Diable est dans les détails dit-on...