Problème d'accents après migration php 5.3 vers 5.4

Fermé
GrandjeanM9 Messages postés 11 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 1 janvier 2016 - 20 sept. 2015 à 10:32
 Utilisateur anonyme - 25 sept. 2015 à 12:07
Bonjour à tous,
OVH, me demande de migrer mon site vers php5.4,
j'ai effectué un certain nombres de modifications en lisant les indications de migration sur le site officiel php, mais lorsque j'ai voulu tester mes pages tout les textes issues de la base de données sont vides lorsqu'il contiennent ds accents.
de plus lorsque j'essaye d'enregistrer dans la base par un formulaire du site, un texte avec accents, cela enregistre aussi du texte vide.
phpmyadmin m'indique que ma base a un interclassement utf8_unicode_ci, il indique pour l'interclassement de chaque table : "latin1_swedish_ci".
J'ai essayé plusieurs conversion en faisant des export / import de table en iso, utf8 dans tout les sens, un peu au hasard il est vrai,
mais sans obtenir de résultat correct.
Pour le moment je suis revenu à php 5.3 mais OVH va supprimer cette version à partir du 24 septembre et là je serai coincé.
Le site est un basé sur du XOOPS, que j'administre bénévolement, mais je me suis formé un peu sur le tas, et là je suis un peu perdu...
Quelqu'un pourrait-il m'aider en m'indiquant une procédure ?
Merci d'avance
A voir également:

4 réponses

Salut,
Une piste de ce côté là :
http://php.net/manual/fr/function.mysql-real-escape-string.php

Avec les autres fonctions dépréciées/obsolètes du langage cela peut expliquer.
L'interclassement étant sur la BD je doute qu'il s'agisse de cela.

Par contre je sais d'expérience que les fonctions de conversions/sécurité des caractères posent problèmes d'une version à l'autre du langage.
Les fonctionnalités dépréciés étant remplacés par mieux et pour régler des problèmes c'est un mieux sauf que ça fait mal sur le coup.
D'où l'intérêt d'utiliser le pattern MVC :)
0
GrandjeanM9 Messages postés 11 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 1 janvier 2016
21 sept. 2015 à 21:54
Bonsoir YangFFIV, merci pour ta réponse, je vais essayer de creuser du coté de cette function. C'est quoi le pattern MVC ?
0
dugenou Messages postés 6087 Date d'inscription mercredi 19 janvier 2005 Statut Contributeur Dernière intervention 30 juillet 2021 1 451
20 sept. 2015 à 12:13
Bonjour,

Une mise à jour de Xoops serait peut-être suffisante ?
0
GrandjeanM9 Messages postés 11 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 1 janvier 2016
21 sept. 2015 à 21:56
Bonsoir,
le problème c'est que j'ai pas mal divergé de certains modules xoops d'origines pour faire des modifs perso et je crains que l'upgrade ne fasse plus de mal que de bien...
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 738
20 sept. 2015 à 14:55
Salut
quitte a faire une transition autant le faire vers php5.6 (la dernière version dispo sur ovh)
et mettre a jour xoops
https://www.frxoops.org/modules/TDMDownloads/singlefile.php?lid=234
si php5.6 pose problème utiliser 5.5 (configurer avec ovhconfig ou htaccess)
0
GrandjeanM9 Messages postés 11 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 1 janvier 2016
21 sept. 2015 à 22:02
Bonsoir animostab,
merci pour tes conseils. Me j'avoue que j'y ai pensé. mais quand j'ai vu le nombre de modifs à faire dans chaque migration, et vu le temps que j'ai passé à faire le passage vers 5.4, j'ai pris un peu peur d'aller plus loin.
je pense que je passerai à 5.6 tot ou tard, mais vu que je ne me sens pas suffisament compétent, je préfère y aller étape par étape. Tu veux dire que 5.4 pose des problème connus côté accents, qui sont résolus par 5.6 ?
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 738
Modifié par animostab le 22/09/2015 à 00:58
5.4 comme 5.6 ne posent pas de problème d'accents
mais dire a ton serveur -- utilise 5.4 alors que tu veux executer des script 5.3 obsolètes ca c'est un problème
as tu des messages d'erreur sur ta page ?
pour activer les messages d'erreurs avec htaccess
http://vadebaco.com
sinon il me semble qu'ovh ai une procédure pour passer en mode développement avec ovh.config et afficher les warning php

tu dis "aucun texte quand des accents sont dans la base de donnée" c'est bien ca ? ...
ce doit être une fonction de php devenue obsolète (voir message de YangFFIV)
Je ne connais pas xoops mais
tu devrais mettre à jour xoops dont la dernière version marche avec php 5.5+
le problème vient sans doute que
1) tu utilise une ancienne version de xoops qui possède des scripts php 5.3 ou inférieur
2) tu configure ton serveur pour qu'il utilise une version de php supérieure a php 5.3
--> résultat des scripts php de xoops sont obsolètes.

si c'était une simple erreur de charset (base, table ou page) le texte s'afficherait mais pas les accents (points d'interrogation ou symboles bizarres)

ou bien tu as bidouillé trop de trucs dans tes modules
essaie quand meme la mise a jour xoops mais fait une sauvegarde avant au cas ou
de toute façon il faudra bien
1) mettre a jour xoops ne serait ce que pour des problèmes de sécurité
2) utiliser un php non obsolète pris en charge par ton hebergeur
3) et que les 2 soit compatibles
Bon courage
0
GrandjeanM9 Messages postés 11 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 1 janvier 2016 > animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019
22 sept. 2015 à 20:37
Bonsoir,
Je n'ai pas de messages d'erreur en mode developement dans ovhconfig. Je pense effectivement que je vais faire évoluer mon xoops, mais je n'aurai pas trop le temps de me lancer la dedans pour le moment malheureusement.
En tout cas merci pour tes conseils. Je vais essayer la solution ci dessous en priorité...
0
Bonjour

Je suis aussi tombé récemment sur un problème de textes qui ne s'affichaient plus en passant de PHP 5.3 à 5.4 sur un site encodé en iso-8859-1, ce qui est probablement ton cas si tes tables sont en latin1_swedish_ci.

Mon problème venait de la fonction htmlspecialchars dont un des paramètres a changé de valeur par défaut au fil des versions de php. Je crois que htmlentities présente le même problème.

Jusqu'à 5.3, le paramètre optionnel "encoding" valait par défaut "iso-8859-1". Je n'avais mis aucune valeur pour ce paramètre.

En PHP5.4 et 5.5, la valeur par défaut est UTF-8. Et là, si on donne en entrée une chaîne qui contient des caractères incorrects, la sortie est une chaine vide. Et on n'affiche plus rien du tout de tout ce qui passe par cette fonction. Rappel : une lettre accentuée encodée en iso-8859-machin est un caractère incorrect pour l'utf8.

En PHP 5.6, la valeur par défaut a encore changé, elle dépend du fichier de configuration php.ini.

La solution a été de reprendre tous les appels à htmlspeciachars et d'ajouter le bon encodage en troisième paramètre :
$affichage=htmlspecialchars($databdd,ENT_COMPAT,"ISO-8859-1");

Comme ça, on n'est plus tributaire des changements de version.
0
GrandjeanM9 Messages postés 11 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 1 janvier 2016
22 sept. 2015 à 20:44
Bonsoir,
effectivement dans ma recherche j'avais déjà vu quelque chose comme ça, mais moins bien expliqué :-)
Je crois que je vais tenter cette modif en priorité,
merci beaucoup
je vous tiens au courant du résultat..
0
GrandjeanM9 Messages postés 11 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 1 janvier 2016
24 sept. 2015 à 06:48
Bonjour,
effectivement c'était la bonne solution.
J'ai remplacé
htmlentities($string)

par
htmlentities($string, ENT_COMPAT, "ISO-8859-1")

et à un autre endroit:
htmlspecialchars($text, ENT_QUOTES)

par
htmlspecialchars($text, ENT_QUOTES | ENT_COMPAT, 'ISO-8859-1')

Merci à tous pour votre aide et vos conseils
Je vais aussi évoluer rapidement vers php 5.6 c'est plus sûr.
0
Utilisateur anonyme
25 sept. 2015 à 12:07
De rien.
C'est un peu un coup de chance que ce soit ça la vraie cause. Il y en avait sans doute d'autres possibles.
0