Probleme affichage & h e l l i p ; en utf-8
Résolu/Fermé
Bob-In
Messages postés
8
Date d'inscription
vendredi 7 décembre 2012
Statut
Membre
Dernière intervention
30 décembre 2012
-
Modifié par Bob-In le 7/12/2012 à 15:35
Utilisateur anonyme - 30 déc. 2012 à 19:11
Utilisateur anonyme - 30 déc. 2012 à 19:11
A voir également:
- Hellip
- Clé windows 8 - Guide
- É - Guide
- Mixcraft 8 - Télécharger - Création musicale
- P/n ✓ - Forum Logiciels
- Adèle consulte son compte sur le site de sa banque et obtient l'affichage ci-dessous. complétez le texte. - Forum Facebook
12 réponses
Utilisateur anonyme
Modifié par le père. le 30/12/2012 à 03:13
Modifié par le père. le 30/12/2012 à 03:13
Bonjour
Il suffit de mettre
Actuellement, tu reçois des données en utf-8. Elles sont (mal) traduites en iso8859-1 par la fonction utf8_decode de la classe AlloData, elle-même appelée par la fonction magique __get de cette même classe. Puis, pour afficher, tu re-transformes en utf-8.
D'une part, c'est absurde de transformer de l'utf8 en iso8859-1 pour le repasser aussitôt en utf8
D'autre part, ça va forcément mal se passer car certains caractères, comme le ... n'existent tout simplement pas en iso8859-1, donc la traduction n'est pas possible. On peut au mieux le remplacer par autre chose, comme le fait la fonction utf8_decode, mais elle ne le fait que pour deux ou trois caractères, elle n'a pas été écrite par quelqu'un de sérieux.
Le plus simple est donc de ne pas toucher au codage d'origine, en mettant ALLO_UTF8_DECODE à false
Il suffit de mettre
define( 'ALLO_UTF8_DECODE', false );(ligne 79 dans AlloCineAPI.php) au lieu de true et de retirer tous tes utf8_encode et ça marche.
Actuellement, tu reçois des données en utf-8. Elles sont (mal) traduites en iso8859-1 par la fonction utf8_decode de la classe AlloData, elle-même appelée par la fonction magique __get de cette même classe. Puis, pour afficher, tu re-transformes en utf-8.
D'une part, c'est absurde de transformer de l'utf8 en iso8859-1 pour le repasser aussitôt en utf8
D'autre part, ça va forcément mal se passer car certains caractères, comme le ... n'existent tout simplement pas en iso8859-1, donc la traduction n'est pas possible. On peut au mieux le remplacer par autre chose, comme le fait la fonction utf8_decode, mais elle ne le fait que pour deux ou trois caractères, elle n'a pas été écrite par quelqu'un de sérieux.
Le plus simple est donc de ne pas toucher au codage d'origine, en mettant ALLO_UTF8_DECODE à false
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
Modifié par Heliotte le 7/12/2012 à 18:13
Modifié par Heliotte le 7/12/2012 à 18:13
tu dis "& h e l l i p ;" - "les trois points"
je ne comprends pas, c'est après l'acquisition de la page, la conversion ?
As-tu tenté une conversion utf-8 à partir d'un Unicode ou d'un utf-7 ? ou le contraire ?
Tu peux mettre ton code sur cjoint.com pour qu'on puisse le voir .. enlever tout ce qui est confidentiel et surligner ou en couleur le code d'acquisition de la page, notamment l'endroit ou tu récupère ce fameux "& h e l l i p ;"
Edit: fautes d'orthographe.
je ne comprends pas, c'est après l'acquisition de la page, la conversion ?
As-tu tenté une conversion utf-8 à partir d'un Unicode ou d'un utf-7 ? ou le contraire ?
Tu peux mettre ton code sur cjoint.com pour qu'on puisse le voir .. enlever tout ce qui est confidentiel et surligner ou en couleur le code d'acquisition de la page, notamment l'endroit ou tu récupère ce fameux "& h e l l i p ;"
Edit: fautes d'orthographe.
Utilisateur anonyme
7 déc. 2012 à 18:42
7 déc. 2012 à 18:42
Bonsoir
Si j'ai bien compris :
t'affiche le ... correctement la 1ère fois, pas la deuxième ? Ça m'étonne beaucoup.
Quand tu compares l'affichage du print_r (qui marche) avec l'autre affichage(qui ne marche pas), s'agit-il de la même police de caractères ? Il se peut que le caractère ... soit absent d'une des polices.
Si j'ai bien compris :
print_r($donnees); $synopsis=$donnees['synopsis']; print_r($synopsis;
t'affiche le ... correctement la 1ère fois, pas la deuxième ? Ça m'étonne beaucoup.
Quand tu compares l'affichage du print_r (qui marche) avec l'autre affichage(qui ne marche pas), s'agit-il de la même police de caractères ? Il se peut que le caractère ... soit absent d'une des polices.
Bob-In
Messages postés
8
Date d'inscription
vendredi 7 décembre 2012
Statut
Membre
Dernière intervention
30 décembre 2012
Modifié par Bob-In le 8/12/2012 à 00:35
Modifié par Bob-In le 8/12/2012 à 00:35
Heliotte, voilà ce qui me permet d'obtenir mes infos :
(si besoin, je mettrai mon code sur cjoint, là j'ai voulu aller vite ^^)
Et 'le père', bien vu pour l'idée du caractère absent, mais le problème persiste avec du Times New Roman, de l'Arial, ou du Serif.
(merci pour vos idées en tt cas !)
$donnees = $helper->$type($code, $profile, $url); //je charge les donnees dans la variable $synopsis = $donnees['synopsis'] //je récupère la valeur de la case 'synopsis' du tableau $donnees print_r($donnees); //no problemo, la partie du synopsis affiche les '...' correctement print_r($synopsis); //les '...' sont remplacés par des '?'
(si besoin, je mettrai mon code sur cjoint, là j'ai voulu aller vite ^^)
Et 'le père', bien vu pour l'idée du caractère absent, mais le problème persiste avec du Times New Roman, de l'Arial, ou du Serif.
(merci pour vos idées en tt cas !)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié par le père. le 8/12/2012 à 01:58
Modifié par le père. le 8/12/2012 à 01:58
Pourrais-tu faire un vrai copier-coller de ton code ? Celui que tu as donné est inexact, il manque un ; à la ligne $synopsis = $donnees['synopsis']
Moyennant cette correction, j'ai essayé ce code et il marche très bien.
Pour être bien sûr du contenu des variables, affiche leurs codes :
et aussi un petit print_r($donnees['synopsis']);
Moyennant cette correction, j'ai essayé ce code et il marche très bien.
Pour être bien sûr du contenu des variables, affiche leurs codes :
for ($k=0;$k<strlen($synopsis);$k++) echo ord($synopsis[$k]),' '; echo '<br>'; for ($k=0;$k<strlen( $donnees['synopsis']);$k++) echo ord( $donnees['synopsis'][$k]),' ';
et aussi un petit print_r($donnees['synopsis']);
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
8 déc. 2012 à 08:21
8 déc. 2012 à 08:21
Bonjour Bob-In,
Je suis d'accord avec "le pére" pour ce qui est de montrer ton code en entier, mais peut-être, si le fichier est trop long, le déposer sur un site comme "http://www.cjoint.com/".
On aura plus de chance découvrir une anomalie.
Essaye de mettre en gras ou tout au moins quelque chose à l'affichage qui nous montrent de visu les endroits où se trouvent "print_r($donnees);" et "print_r($synopsis);"
Je suis d'accord avec "le pére" pour ce qui est de montrer ton code en entier, mais peut-être, si le fichier est trop long, le déposer sur un site comme "http://www.cjoint.com/".
On aura plus de chance découvrir une anomalie.
Essaye de mettre en gras ou tout au moins quelque chose à l'affichage qui nous montrent de visu les endroits où se trouvent "print_r($donnees);" et "print_r($synopsis);"
Je n'ai pas demandé le code en entier, j'ai juste demandé que ce qui était recopié le soit sans erreur de recopie. Mais c'est sûr qu'en avoir un peu plus long ne pourra qu'aider à comprendre.
Mais dans un premier temps, afficher les codes comme je le demande ici donnera déjà une bonne indication de ce qui se passe.
Mais dans un premier temps, afficher les codes comme je le demande ici donnera déjà une bonne indication de ce qui se passe.
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
8 déc. 2012 à 17:15
8 déc. 2012 à 17:15
Milles excuses le père. Je me suis mal exprimé en disant cela, je voulait dire que j'étais d'accord pour la partie de code, mais que, perso, j'aurais préféré plus, c'est à dire, le code complet.
J'ai voulu aller trop vite dans ma requête
J'ai voulu aller trop vite dans ma requête
\\|// {0;0}
Bob-In
Messages postés
8
Date d'inscription
vendredi 7 décembre 2012
Statut
Membre
Dernière intervention
30 décembre 2012
Modifié par Bob-In le 29/12/2012 à 22:24
Modifié par Bob-In le 29/12/2012 à 22:24
Bonsoir tout le monde, un grand désolé pour le retard, mais la période des fetes m'a bien pris ! J'espère que vous avez tous passé un bon noël et êtes en train de planifier votre nouvel an.
Pour ma part, je vous ai préparé un fichier zip qui comprend le code mis en forme pour vous aider à comprendre mon problème.
Je l'ai hébergé ici : http://www.terafiles.net/v-175801.html
Tout se trouve dans le fichier indes.php (par contre pour le faire fonctionner, vous devez l'ouvrir en localhost, avec WAMP ou MAMP). J'espère que cela pourra vous aider à y voir plus clair.
(désolé pour les erreurs dans l'ancien code, je ferais plus attention la prochaine fois ;)
Bon nouvel an à tous !
Pour ma part, je vous ai préparé un fichier zip qui comprend le code mis en forme pour vous aider à comprendre mon problème.
Je l'ai hébergé ici : http://www.terafiles.net/v-175801.html
Tout se trouve dans le fichier indes.php (par contre pour le faire fonctionner, vous devez l'ouvrir en localhost, avec WAMP ou MAMP). J'espère que cela pourra vous aider à y voir plus clair.
(désolé pour les erreurs dans l'ancien code, je ferais plus attention la prochaine fois ;)
Bon nouvel an à tous !
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
Modifié par Heliotte le 29/12/2012 à 23:39
Modifié par Heliotte le 29/12/2012 à 23:39
Bonsoir Bob-In,
J'espère que tu as également passé un bon Noël ..
Pour les trois points, je ne sait pas encore où est le problème, mais le "?" se trouve déjà dans la variable $synopsis !!
Edit:
J'ai fait plusieurs test sur cette variable ..
J'espère que tu as également passé un bon Noël ..
Pour les trois points, je ne sait pas encore où est le problème, mais le "?" se trouve déjà dans la variable $synopsis !!
Edit:
J'ai fait plusieurs test sur cette variable ..
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
Modifié par Heliotte le 29/12/2012 à 23:48
Modifié par Heliotte le 29/12/2012 à 23:48
Bob-In,
Pire .. c'est déjà dans la variable où tu récupère les infos .. $donnees['synopsis']
Edit:
Donc, avant n'importe quelle conversion que tu apportes .. c'est déjà dedans.
On ne peut même pas travailler sur le caractère "?" car ce caractère est interprété à l'identique du point d'interrogation d'un phrase .. interrogative !!
Pire .. c'est déjà dans la variable où tu récupère les infos .. $donnees['synopsis']
Edit:
Donc, avant n'importe quelle conversion que tu apportes .. c'est déjà dedans.
On ne peut même pas travailler sur le caractère "?" car ce caractère est interprété à l'identique du point d'interrogation d'un phrase .. interrogative !!
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
29 déc. 2012 à 23:50
29 déc. 2012 à 23:50
Le code de test:
<p id="synopsis"> <?php echo "======================<br />"; for ($i = 1 ; $i < strlen($synopsis); ++$i) { if($synopsis[$i]=="?") { echo "..."; } else { echo $synopsis[$i]; } } echo "======================<br />"; for ($i = 1 ; $i < strlen($donnees['synopsis']); ++$i) { echo $donnees['synopsis'][$i]; } echo "======================<br />"; ?></p>
Bob-In
Messages postés
8
Date d'inscription
vendredi 7 décembre 2012
Statut
Membre
Dernière intervention
30 décembre 2012
30 déc. 2012 à 16:01
30 déc. 2012 à 16:01
Un grand merci à le père, je n'ai pas encore essayé la solution, mais j'ai déjà mieux compris la facon dont je récupère et utilise les données d'Allociné :)
J'essaye cet après midi, en espérant que tout se passera bien !!
Et encore merci pour votre aide ! :)
J'essaye cet après midi, en espérant que tout se passera bien !!
Et encore merci pour votre aide ! :)
Bob-In
Messages postés
8
Date d'inscription
vendredi 7 décembre 2012
Statut
Membre
Dernière intervention
30 décembre 2012
30 déc. 2012 à 16:42
30 déc. 2012 à 16:42
Le père, je CRYOGÉNIE !! (cire au génie)
Tout fonctionne, j'ai supprimé tous les "utf8_encode", et tout s'affiche à merveille. Cela venait donc bien de l'API en elle-même, je n'aurais jamais trouvé.
Pour ceux qui cherchent à l'avenir, il faut donc mettre
Merci encore ! Et bon nouvel an ! :)
Tout fonctionne, j'ai supprimé tous les "utf8_encode", et tout s'affiche à merveille. Cela venait donc bien de l'API en elle-même, je n'aurais jamais trouvé.
Pour ceux qui cherchent à l'avenir, il faut donc mettre
define( 'ALLO_UTF8_DECODE', false );à la ligne 79, dans l'API d'allociné, et tout ira pour le mieux.
Merci encore ! Et bon nouvel an ! :)
30 déc. 2012 à 04:33
__get à son tour appelle utf8_decode (définie dans la classe AlloData)
utf8_decode fait un str_replace farfelu (il faudrait un mb_str_replace), puis appelle utf8_decode (celui de PHP, pas celui de la classe AlloData cette fois... Faut suivre !)
Dans ton cas précis, c'est ce dernier appel qui transforme le caractère … initialement codé correctement E2 80 A6 comme il se doit en utf8, en un simple point d'interrogation.
30 déc. 2012 à 12:26
Il est un fait que j'ignorais cette procédure.
30 déc. 2012 à 12:33