Bonjour,

Comment allez-vous ?

Je vous explique :

Je gère des utilisateurs tout ce qui a de plus classique, dans le cadre de ma politique de confidentialité je dois encrypter TOUT ce qui est stocker dans ma base, j'ai un script pour encoder / décode là n'est pas le problème.

Le problème est :

Lorsque je récupère des informations de ma base je les décrypte pour que l'utilisateur les voit et puisse les modifier et j'ai la grande joie de trouver ce jolie caractère : " � " j'ai : < la bonne valeur décoder > � � � � � � � � � � � �.

J'ai besoin d'aide !! De votre aide !!

Cordialement,
TJ_

PS: Je précise que j'ai effectué des recherches préalables sur Des moteurs de recherche !!

21 réponses


Hello,

C'est pas un problème d'encodage UTF-8 ?

Bonne journée,
Gasp.

Salut,

Sans code, celà va être compliquer de t'aider ....

C'est un prôbléme d'encodage UTF-8, c'est soit ta requette qui est pas en utf-8 ou t-on IDE.
Car chez moi aussi il me le fait quand je code avec phpstorm.

Ou sinon, tu fais un joli new PDO($dns, $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']);

Personellement aucun problème d'encodage sous PHPStorm @Mikayil ^^ Suffit de bien le configurer.

Pareil que TiimZero1 pour l'encodage quand on sais regardé en bas (en petit ^^ ) l'encodage du fichier :

Sinon oui faut toujours vérifier que le fichier, le html, le php et la bdd soit dans le même encodage de caractère.

Merci pour vos réponses mais non ce n'est pas un problème d'encodage UTF-8 j'avais déjà essayer et puis je n'utilise pas phpstorm et cela apparait dans mon navigateur et pas ailleurs.
le code :

$req = $bdd->prepare('SELECT * FROM users_infos WHERE username = :usr');
    $req->execute(array(
        'usr' => username,
    ));
    while($data = $req->fetch(PDO::FETCH_ASSOC)){
        $nom = dec($data['nom']);
        $prenom = dec($data['prenom']);
        $email = dec($data['email']);
        $tel = dec($data['telephone']);
        $ddn = dec($data['date_de_naissance']);
        $pays = dec($data['pays']);
    }
    $req->closeCursor();

Je ne peux pas vous montrer l'intérieur de la fonction dec (sécurité oblige)
après je fait simplement un echo de la variable donc je ne vois pas de soucis ici

Merci d'avance pour vos réponse,
TJ_

EDIT: Le $ est bien dans mon code je l'ai juste oublier de le copier ici dsl

Bonjour, vérifie si l'erreur ne vient pas de la requête;

req = $bdd->prepare('SELECT * FROM users_infos WHERE username = :usr');

À la place, essait ceci;

$req = $bdd->prepare('SELECT * FROM users_infos WHERE username = :usr');

Cordialement.

Peut être une piste
Si tu as utilisé le type CHAR pour la chaine chiffrée, le champ est compété à droite par des blancs.
Lors du décryptage les blancs deviennent ?????

Salut,
dans ma base les champs sont de type varchar(255)
Mais je vais explorer cette hypothese Huggy

Nope Huggy c'est pas ca ! Merci quand même

Remonte petit topic

Salut,

Tu n'as fait aucun retour sur la solution de @lapin-math, elle ne fonctionne pas ?

Tu as vérifié l'encoding de ta bdd ? Tu utilises quoi pour la gérer ? PhpMyAdmin ?

Salut,

Lorsque tu instancies ta classe PDO, tu peux préciser plusieurs options :

$options = [
  PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
];
$bdd = new PDO('mysql:host=localhost;dbname=ma_base', 'root', '', $options);

Est-ce que tu as mis une META charset utf-8 dans le HEAD de ta page ?

Salut,
désolé et non la solution de lapin-math ne fonctionne pas et comme c'est la même que betaWeb ça ne marche pas non plus et oui betaWeb j'ai bien mis la balise meta !
L'encoding de ma base est en utf8_general_ci et oui j'utilise phpMyAdmin pour la gestion.
Merci pour vous résponses !

Donc c'est à l'insertion des datas en base que ça coince. Tu les as insérées à la mano ou via un script ?
Que donne un utf8_encode($data) ?

Salut,
Je les ai insérées via un script, avec utf8_encode ca ne change rien !
Merci quand même !

Donc ne cherche pas plus loin, c'est lors de l'insert que l'encodage a "foiré". Tu as test avec utf8_decode ?

Merci betaWeb j'ai tester aussi avec utf8_decode mais rien n'y fait j'ai fait aussi mes recherche en partant de ce que tu as dit et c'est mon cryptage qui foire !
Voici mon code pour encrypter :

function enc($enc){
        $key = "GEU0JTfIPosP6rb27tHBIny0B750LE07arZnj1E5ln4p06ojUenA5Y5g2fUZH935hzgpjo02LQN8QK1Voo2sFUy6BJC532u073A41hhmR1DnOz5Vdw4Kq0Hh0az023LN";
        $key_size = strlen($key);
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $enc, MCRYPT_MODE_CBC, $iv);
        $ciphertext = $iv . $ciphertext;
        $ciphertext_base64 = base64_encode($ciphertext);
        return $ciphertext_base64;
    }

Il y a t il un probleme ou plusieurs si oui le(s) lequel(s) ? Merci d'avance.

Ta clé $key ne devrait-elle pas être en binaire ?
tu pourrais prendre le sha256 de ta clé

Merci huggy, je vais explorer cette solution...