Bonjour,
Alors dans la balise meta de mon fichier HTML j'ai :
Après c'est vrai que je n'ai pas tout le contenu.Code:<meta charset="UTF-8">
Pour la page PHP je l'ai bien rajouté par contre pour le serveur c'est une base Oracle et là..
Version imprimable
Bonjour CosmoKnacki,
Alors avant toute conversion ça donne ça :
et après la conversion ça donne ça :Citation:
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a8 74 72 61 67 65
<br>70 61 72 61 6d 65 74 72 61 67 65
<br>70 61 72 61 6d 65 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 a9 74 72 61 67 65
Citation:
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a8 74 72 61 67 65
<br>70 61 72 61 6d 65 74 72 61 67 65
<br>70 61 72 61 6d 65 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
<br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
Donc $info est déjà en UTF8. Il n'est pas nécessaire de le convertir. Retire les iconv pour $info laisse les autres pour le moment et regarde ce que ça donne.
Maintenant il faut tester le tableau: place avant et après la conversion de $value:Vérifie aussi si le tableau contient plusieurs entrées dont la clef commence par "param" (dans n'importe quelle casse).Code:
1
2
3
4 if ($key=='param') { echo PHP_EOL, '<br>'; for ($i=0;$i<strlen($value);$i++) { echo dechex(ord($value[$i])), ' '; } }
Ok ça marche, j'ai toujours le problème.
Avant conversion ça donne :
Après conversion ça donneCode:
1
2
3
4
5
6
7 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 ..
C'est donc identique :weird:.Code:
1
2
3
4
5
6
7 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 <br>30 31 32 33 34 35 36 37 38 39 31 ..
J'ai vérifié et je n'ai qu'un seul param
Désolé j'ai marqué $i au lieu de $value[$i], j'ai corrigé depuis.
Bonjour CosmoKnacki,
Alors du coup avant conversion ça donne :
Et après conversion :Code:
1
2
3
4
5
6
7 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 ..
Les données sont identiques :weird:ça veut dire que c'est bien en UTF-8 ?Code:
1
2
3
4
5
6
7
8
9 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 <br>70 61 72 61 6d 65 74 72 61 67 65 ..
On ne peut rien conclure de ce dernier test car la valeur de remplacement est "parametrage" (sans accent) donc tous les caractères du mot sont dans la plage ascii (de 0 à 7F) que les différents encodages ont en commun.
Je pense que ton tableau est codé en dur dans le code (i.e. il ne provient pas d'une base de données ou d'un fichier), est-ce bien le cas? Si oui, avec ton éditeur de code fait "enregistrer sous" et vérifie dans la fenêtre que l'encodage du fichier est bien UTF-8, si c'est ISO8859-bidule ou Windows-machintruc change pour UTF-8 (change aussi le nom du fichier pour faire des tests dessus sans écraser l'autre). Si ton éditeur ne te permet pas de faire ça, utilises en un autre comme notepad++. (Tu dois pouvoir aussi savoir quel est l'encodage du fichier, avec un truc du genre information fichier.)
Il faut aussi vérifier que la coquille n'est pas déjà dans le texte d'origine! Donc part à la recherche d'éventuels "paramétragetre" ou assimilé avant toute modification.
regex et utf-8:
- vérifie que tu as bien utilisé le modificateur "u" (en minuscule) et non pas "U" (en majuscule) dans la pattern ce qui est totalement différent.
- Il est possible, bien que peu probable que pcre ait été compilé sans le support UTF8 (ça peut ce vérifier avec var_dump(preg_match("~\A\w\z~u", "\xC3\xA9"));, si le résultat est int(0), il n'y a pas de support de l'UTF8).
- avec l'unicode, bien que je doute que ce soit le cas ici, une lettre accentuée comme par exemple le "é" peut être représentée de deux manières, soit avec le caractère [LATIN SMALL LETTER E WITH ACUTE](directement le e accent aigu), soit par la combinaison de deux caractères, [LATIN SMALL LETTER E] (un "e" normal) auquel on ajoute le caractère [COMBINING ACUTE ACCENT](l'accent). Or ce [COMBINING ACUTE ACCENT] ne fait pas partie de la classe \w ce qui peut être source d'erreurs, la parade consiste à remplacer \w par [\pL\pM] (deux classes qui contiennent respectivement les lettres et les caractères combinants).
Voilà après je ne vois pas vraiment d'autres pistes. Après d'une manière plus générale, pour se sortir de ce genre de problème, il faut vérifier l'encodage de tous les éléments (code source, base de données, fichiers de données externe...) et adopter l'UTF8 partout si ce n'est déjà fait. Le travail de fond permet de lever les derniers lièvres qui résistent.
Merci pour ta réponse
Alors il me ressort int(0), il y a quelque chose à faire pour qu'il supporte l'UTF-8.
Sinon si je remplace \w par [\pL\pM] je n'ai plus le paramétragetre par contre les éléments accentués de $value ressortent mal :(
Ahah! Alors là je suis sur le cul, je savais que c'était possible, mais je n'avais jamais encore rencontré le cas.Citation:
Alors il me ressort int(0), il y a quelque chose à faire pour qu'il supporte l'UTF-8.
Pour avoir PCRE avec le support de l'UTF8 réinstalle PHP, il est normalement livré avec une version compilée de libpcre avec le support de l'UTF8 par défaut. (Si tu es sous linux/unix, tente de réinstaller le paquet libpcre d'abord pour avoir la version par défaut du dépôt.)
Qu'entends tu par "ressortent mal", ça ressemble à quoi?Citation:
Sinon si je remplace \w par [\pL\pM] je n'ai plus le paramétragetre par contre les éléments accentués de $value ressortent mal
As-tu testé en virant tous les iconv?
Est-ce que ton code PHP envoie une entête HTTP avec l'encodage? (un truc du genre: header('Content-Type: text/html; charset=utf-8');) ou alors est ce que le fichier html produit contient entre les balises <head></head> soit une balise <meta charset="UTF-8"> (dans le cas du html5), soit <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />(pour du xhtml) afin d'informer le navigateur de l'encodage utilisé?
Alors je n'ai pas la main sur le serveur mais je vais essayer de voir ça merci ;).
Mon PHP renvoie ça, c'est normal car c'est un WS qui me ressort du json et j'ai bien leCode:Content-Type:application/json; ; charset=utf-8
dans mon fichier HTML.Code:<meta charset="UTF-8">
Si je retire les conversions l'utilisation derésout le problème.Code:[\pL\pM]
Merci beaucoup pour ton aide en tout cas.
Bonne journée