[RESOLU] problème d'accents en passant de la version 5.5 à la version 5.6

Eléphanteau du PHP | 11 Messages

02 déc. 2016, 12:05

Bonjour à tous,
L'hébergeur de mes sites me signale la fin du support gratuit de la version 5.5, et me conseille de passer à la 5.6,
ce que j'ai tenté, mais vite revenu en arrière, car de nombreux problèmes d'accents. ( remplacés par des caractères spéciaux ).
exemple :
Association de la loi 1901, elle a �t� cr��e en 1968.
Elle b�n�ficie de l'agr��ment Jeunesse et Sports, est affili�e ANCV,

Et c'est idem si je passe à la version 7.0.

Je suis passé dernièrement de la 5.3 à la 5.5 sans problèmes.
J'ai lu les préconisations de migration, http://www.php.net/manual/fr/migration56.php
sans voir ce qui pourrait poser problème sur les accents.
Je n'ai pas de php.ini chez l'hébergeur.

Toutes mes pages sont avec l'entête :
<meta content="text/html; charset=ISO-8859-1"/>
J'ai essayé vainement ISO-8859-15, et UTF-8, et je ne vois pas comment le résoudre.
A domicile, J'utilise wampserver avec php 5.3, et je n'ai pas de php.ini, celui qui est dans la dir. de wamp ne donne pas de paramètre sur le charset ( il est désactivé ).

N'étant pas très calé, quelqu'un aurait-il des tuyaux pour y remédier ?
et je le remercie d'avance.
bien cordialement

Eléphant du PHP | 176 Messages

02 déc. 2016, 13:21

Bonjour,

Tu peux essayer cela
Ouvre ton fichier dans notepad++
Dans le menu encodage -> Convertir en UTF-8 (sans BOM)
Cordialement
Naroth

Eléphanteau du PHP | 11 Messages

02 déc. 2016, 19:21

Bonsoir Naroth,
Non cette manip ne fonctionne pas.
Je la connais pour l'utiliser lors d'imports dans des bases Mysql,
et je ne vois pas ce que çà pourrait apporter, vu que le texte incriminé est inclus
dans une page html/php, et que celle-ci est transférée sur un serveur unix
chez l'hébergeur.
Néanmoins, je l'ai essayée, et je te confirme que non.
merci quand même.
cordialement,

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 déc. 2016, 20:53

Bonjour,

Sur Firefox ou Chrome, fais Ctrl+Maj+i, onglet réseau et recharge ta page problématique.
Clic sur ta page et regarde l'entête de réponse du serveur à la ligne Content-type pour vérifier quel encodage est indiqué par ton serveur
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

03 déc. 2016, 11:19

Bonjour @rthur,

ça doit être la piste :
- Chrome : dans l'onglet réseau, je ne vois pas de ligne "content-type" ...?
- Firefox : voici l'info donnée à la console à l'ouverture de la page déclarée en index :
"La déclaration d'encodage de caractères du document HTML du cadre n'a pas été trouvée lors de l'analyse des 1024 premiers octets du fichier. S'il est affiché dans un navigateur configuré différemment, cette page sera automatiquement rechargée. La déclaration d'encodage de caractères doit être déplacée dans les 1024 premiers octets du fichier."

Comme mes pages commencent toutes par un, voir plusieurs scripts php, l'encodage ne serait pas trouvé.
Il faut donc que je modifie, et faire des tests en migrant en 5.6
( je suis resté en v.5.5, sachant que pendant que je teste le site est illisible ),
puis je poste le résultat dès que possible.

merci en tout cas

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 déc. 2016, 11:58

Comme mes pages commencent toutes par un, voir plusieurs scripts php, l'encodage ne serait pas trouvé.
Le message d'erreur indique l'encodage html donc dans ton code HTML, si tu fais clic droit > afficher la source il faut que tu vérifies que l'encodage en HTML soit bien défini.

C'est curieux que ton serveur ne renvoie pas de Content-type.
Voila comment le définir avec son encodage en PHP à mettre au tout début de ton script.
header('Content-Type: text/html; charset=utf-8');
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

05 déc. 2016, 11:53

Bonjour, et merci pour l'attention,
avec un peu de retard, ( WE oblige et le site est beaucoup visité le WE ),
voici les essais que j'ai faits :
1- avec Firefox, je suis arrivé à afficher le "content-type" et malgré que toutes mes pages soient en iso-8859-1,
il m'affiche en "debug" UTF-8.
J'ai donc tout modifié les pages en les mettant en UTF-8, et là firefox m'affiche seulement Content-Type :"text/html" ???

2- avec Chrome, je suis arrivé à l'afficher également ( il me fallait aller ensuite sur l'onglet "header" ), et c'est pareil :
Content-Type :"text/html"
3- j'ai ajouté " header('Content-Type: text/html; charset=UTF-8'); à plusieurs pages pour voir
résultat identique : Content-Type:text/html

Je n'ai plus de message d'erreur en console.

ce qui m'étonne, c'est qu'ils ne me donnent pas le bon charset.
Est-ce que en mettant un php.ini avec un charset, à la racine du site çà pourrait le faire ?

Je vais chercher pour te mettre une capture d'écran.
cordialement

Eléphanteau du PHP | 11 Messages

06 déc. 2016, 12:04

Bonjour,
voilà des captures d'écran avec les 2 versions php 5.5 et 5.6, et Chrome ou Firefox :

en version 5.5, pour Chrome, le content-type retourné est "text/html" :
Image

en version 5.5, pour Firefox, le content-type retourné est "text/html" :
Image

en version 5.6
pour Chrome, le content-type retourné est "text/html; charset = UTF-8" :
curieux, puisque j'ai défini 8859-1 sur toutes les pages :
<head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> ... </head>
Image
pour Firefox, le content-type retourné est aussi "text/html; charset = UTF-8" :
Image

Je passe donc toutes mes pages en UTF-8, mais rien ne change, j'ai toujours ce problème d'accents :
Chrome en 5.6 avec UTF-8 :
Image
Firefox en 5.6 avec UTF-8 :
Image


ps la page affichée contient toujours :
<?php
header('Content-Type: text/html; charset=ISO-8859-1'); ...

cordialement,

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 déc. 2016, 15:28

salut,

le plus simple c'est demander as ton hébergeur un solution de son cru pour qu'il ne force pas le charset en UTF-8.
Il s'agit de l'option de configuration default_charset qui vaut utf-8 par défaut.
Normalement la fonction header doit faire le boulot, pour peu qu'elle soit sur toutes les pages accédées depuis le web.
[quote="doc php"]Toutes les versions de PHP vont utiliser cette valeur comme jeu de caractères par défaut dans l'en-tête par défaut Content-Type envoyé par PHP si l'en-tête n'est pas écrasé via un appel à la fonction header().[/php]

a pire tu peu modifier globalement ce comportement dans un fichier ini local, le htaccess ou en utilisant la fonction ini_set. plus d'info => http://php.net/manual/fr/configuration.changes.php

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 11 Messages

06 déc. 2016, 18:25

Salut Mogli,
Comme ta devise "Il en faut peu pour être heureux ......",
il suffit apparemment d'un php.ini avec default_charset = "iso-8859-1"
les navigateurs affichent bien : " Content-Type:text/html; charset=iso-8859-1",
et exit les caractères spéciaux.

un grand merci à tous =D>
@+

edit : je pensais que la déf. du charset dans l'en-tête html suffirait

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 déc. 2016, 10:21

de rien.
Malheureusement, non il semble de l'entête http prime sur l'info du document ...
c'est con, mais il faut bien avoué que si l'info est dupliquée il faut bien faire une choix, et la détection utf-8 / iso n'est pas toujours super fiable (en fait ça se goure souvent ;) ).
et ce n'est pas ma citation c'est la chanson de baloo :)

@+
Il en faut peu pour être heureux ......