Problème d'accents après migration php 5.3 vers 5.4
GrandjeanM9
Messages postés
12
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
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
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:
- Problème d'accents après migration php 5.3 vers 5.4
- Migration windows 7 vers windows 10 - Accueil - Mise à jour
- Faststone capture 5.3 gratuit français - Télécharger - Capture d'écran
- Easy php - Télécharger - Divers Web & Internet
- Qwerty vers azerty - Guide
- Vers quelle adresse web renvoie ce lien - Guide
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 :)
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 :)
GrandjeanM9
Messages postés
12
Statut
Membre
Bonsoir YangFFIV, merci pour ta réponse, je vais essayer de creuser du coté de cette function. C'est quoi le pattern MVC ?
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)
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)
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 ?
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 ?
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
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
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é...
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é...
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 :
Comme ça, on n'est plus tributaire des changements de version.
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.
Bonjour,
effectivement c'était la bonne solution.
J'ai remplacé
par
et à un autre endroit:
par
Merci à tous pour votre aide et vos conseils
Je vais aussi évoluer rapidement vers php 5.6 c'est plus sûr.
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.