Comparaison entre chaine de caractères et encodage

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comparaison entre chaine de caractères et encodage

Re: Comparaison entre chaine de caractères et encodage

par Ceubex » 28 août 2012, 01:47

Mauvaise nouvelle c'est déjà en UTF8 sans BOM
Je pense que ça viens plutot du problème des une sur deux fois où le caractère est nul. De toute manière en ce qui me concerce strlen($contenuCase) = mb_strlen($contenuCase) dans ce cas. Mais je note que c'est à éviter

Re: Comparaison entre chaine de caractères et encodage

par moogli » 28 août 2012, 00:04

strlen ne travail qu'avec de l'iso ! donc a oublier la


ajouter un header ne sert à rien (a part envoyer un charset dans l'entête http)

vue l'affichage sur le forum tu as un soucis d'encodage mais du fichier lui même.

avec ton editeur de texte préféré (sauf word / openoffice et truc du genre) vérifie l'encodage du fichier (par exemple avec notepad++ tout simplement avec le menu encodage, choisis utf-8 sans BOM)


@+

Re: Comparaison entre chaine de caractères et encodage

par Ceubex » 27 août 2012, 22:50

j'ai executé le code suivant :

Code : Tout sélectionner

for($k=0;$k<strlen($contenuCase);$k++) echo $contenuCase[$k].':';
Voici le résultat : m::o::t:: ::c::l::�:�:
C'est bizarre on dirait qu'un caractère sur deux est "nul" et il y a une spécificité pour les caractères spéciaux

Re: Comparaison entre chaine de caractères et encodage

par Ceubex » 27 août 2012, 22:29

Je viens d'ajouter header('Content-Type: text/html; charset=utf-8'); en haut de mon fichier pour être sûr mais j'avais déjà <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> dans le html. Ca n'a rien changé. J'ai remplacé strlen par mb_strlen mais le résultat est identique

Re: Comparaison entre chaine de caractères et encodage

par moogli » 27 août 2012, 20:55

mb_strlen pas strl_len

ton fichier il est bien en utf-8 ? (le ficher php pas le fichier csv)


@+

Re: Comparaison entre chaine de caractères et encodage

par Ceubex » 27 août 2012, 20:41

Ca avait l'air d'une super idée, mais c'est dingue ça ne marche toujours pas
Pour info lorsque je fais un mb_detect_encoding sur $contenuCase ça me met la plupart du temps du UTF-8.
Quand $contenuCase à la valeur "mot clé", strlen($contenuCase) retourne 14 alors que strlen('mot clé') retourne 8

Re: Comparaison entre chaine de caractères et encodage

par moogli » 27 août 2012, 14:19

salut,

as tu essayé http://fr.php.net/manual/fr/function.mb-ereg.php ?

pour info tu peux simplifier ton code avec http://www.php.net/file et str_getcsv

+

Re: Comparaison entre chaine de caractères et encodage

par Ceubex » 26 août 2012, 17:51

déjà essayé et ça ne marche pas

Re: Comparaison entre chaine de caractères et encodage

par Invité » 26 août 2012, 17:49

Bonjour,
if($contenuCase==utf8_encode('repère 1')) ...

???

Comparaison entre chaine de caractères et encodage

par Ceubex » 25 août 2012, 19:01

Bonjour,

J'ai un soucis étonnant avec la comparaison de string.
Je commence par télécharger un CSV depuis un site, puis je le lis en faisant un explode de cette manière :

Code : Tout sélectionner

//ouverture $handle = @fopen($tmp, "r"); if ($handle) { while (($ligne = fgets($handle, 4096)) !== false) { $cases=preg_split("#;|\t#",utf8_encode($ligne));
Ensuite j'essaye de repérer une case :

Code : Tout sélectionner

$contenuCase=mb_strtolower(trim($cases[$i]), 'UTF-8'); if($contenuCase=='repère 1') ...
Mon soucis est que ça ne marche pas et pourtant quand j'écris $contenuCase sur ma page, je texte est bien strictement 'repère 1' à un moment, pourtant je ne passe pas dans le IF.

Ce problème m'étonne beaucoup. J'ai aussi essayé $contenuCase==='repère 1' et strcmp($contenuCase,'repère 1') pour la comparaison mais rien n'y fait.
Avez vous une idée d'où vient ce problème ?