Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forum osCommerce-fr _ Echanges développeurs _ Rendre compatible la MS 2.2 avec PHP 5.4

Écrit par : skieur 6 Jan 2014, 11:16

Bonjour,

j'ai commencé à travailler sur une MS 2.2 pour la rendre compatible avec php5.4 cela deviens urgent.

J'ai fais a peu prés la compatibilité avec 5.3 remplacement des ereg et eregi.

Je m'attaque au problème des textes accentuées qui disparaissent du backoffice à cause des htmlentities qui sont gérées différemment en php5.4.

Ma priorité va au fichier orders.php du backoffice afin que les commentaires des commandes soient affichés.

Est ce que vous avez une idée ou l'avez déjà fait ?

Note je veux bien regrouper les infos sur ce post et en faire un documen ressource pour le passage à PHP5.4.

Merci.

Écrit par : Bonbec 6 Jan 2014, 11:25

Bonjour,

Pour htmlentities, dans la doc php il est marqué :

Citation
htmlentities() prend un troisième argument optionnel encoding qui définit l'encodage utilisé durant la conversion. Si omis, la valeur par défaut de cet argument est ISO-8859-1 pour les versions antérieures à la version 5.4.0 de PHP, et UTF-8 à partir de la version 5.4.0. Malgré le fait que cet argument soit techniquement optionnel, vous êtes vivement encouragé à spécifier une valeur correcte pour votre code.

As-tu essayé d'ajouter systématiquement ce 3ème argument ?

EDIT : je viens de regarder mon code de ma MS2, htmlentities n'apparaît qu'une seule fois dans admin/includes/functions/general.php et a bien le 3ème paramètre :
Code
function wd_remove_accents($str, $charset='utf-8')
{
    $str = htmlentities($str, ENT_NOQUOTES, $charset);
  ...

Écrit par : skieur 7 Jan 2014, 10:40

Déjà j'ai vu dans le code de le page orders.php que l'on était en iso8859 il faut commencer par là non ? Je veux dire le passeer en utf8, mais il faut aussi le faire sur la base de donnée ?

Citation
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html dir="ltr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Écrit par : Bonbec 7 Jan 2014, 13:18

Bonjour,

Vu qu'à partir d'Osc 2.3 tout passe en UTF-8, effectivement tu as intérêt à passer ton site en UTF-8.
Si tu commences par un fichier, il te faudra TOUT passer en UTF-8 sans BOM : répertoires catalog, admin et BDD.
Les pages regorgent d'include ... Ce n'est pas insurmontable mais c'est un peu long et répétitif.

J'ai passé mon site MS2 en UTF-8 et il est adapté au php 5.3 (pas encore fait le 5.4 vu que je risque de passer en Osc 2.3.3.4 si mes tests continuent à être bons).
Il y a de nombreux fils sur le passage en UTF-8, lis les et si tu as besoin d'aide, tu poses la ou les questions nécessaires que je regarde mes fichiers de ma MS2.

PS : il se peut que la FAQ de ton hébergeur te donne de précieuses infos, comme le https://www.infomaniak.com/support/faq/questions/eviter_les_problemes_de_caracteres_inhabituels_et_les_soucis_d_encodage_des_pages-1124.html?language=french par exemple.

Écrit par : skieur 16 Aug 2014, 21:23

Il y a un petit truc que je ne comprend pas

Travaillant sur un serveur avec PHP 5.4 Lorsque l'on exécute orders.php le contenu de la base de donnée accentué est correctement restitué.

lorsque l'on exécute orders.php?page=...=...&action=edit le contenu de la base de donnée qui comporte des accents n'est pas restitué.

Qu'est ce qui est à la base de cette différence de traitement ?

Merci.

Écrit par : skieur 17 Aug 2014, 15:46

Je me répond à moi même c'est à cause du htmlspecialchars dans admin/includes.functions/general.php en php 5.4 l'encoding est defini par défaut à UTF 8 (tout comme l'avait dit bonbec d'ailleurs unsure.gif )

Comme j'ai pas envie de passer tout le site en UTF 8 voila ce que je vais faire pour rendre compatible ma MS 2.2 avec php 5.4. Je mettrai à jour mon post. C'est pas du codage propre, je ne sais pas si cela vous servira mais cela m'aurait servit de le trouver :

mettre un serveur de dev en mode verbose et remplacer toutes les ereg functions par des preg functionslà où il y a des erreurs tout comme indiqué là :

https://github.com/osCommerce/oscommerce2/commit/79c601a7b3ee87943b92a5e6d77ce02480b49ffe

et

https://github.com/osCommerce/oscommerce2/commit/88d550f392d86c02d2fe16d0b93f1de8aa6a6770

fichier

admin/includes.functions/general.php

trouver (function tep_output_string : ligne environ 41 chez moi)

Code
return htmlspecialchars($string);


remplacer par

Code
        return htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');


du coup idem dans general.php coté front office

trouver ( function tep_output_string : ligne 46 environ chez moi)

Code
return htmlspecialchars($string);


remplacer par

Code
        return htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');


fichier admin/includes.functions/database.php

trouver ( function tep_db_output($string) { : ligne 128 environ chez moi)

Code
return htmlspecialchars($string);


remplacer par

Code
        return htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');


fichier admin/categories.php

traiter htmlspecialchars lignes environ 11153, 1159,1160,1161,1162,1163,1164

Écrit par : Dudule 22 Nov 2014, 17:26

Salut,

J'avais le même problème d'affichage que toi dans admin suite au changement d'hébergeur de mon site. Je n'arrive pas à configurer la version de php sur le nouveau hébergeur.

J'avais déjà le site compatible 5.3 (modification des ereg....) et je me suis attaqué au passage en UTF8 :
* toutes les tables et la base complète
* tous les fichiers ouvert et enregistré en UTF8 s'il ne l'étaient pas
* modif du charset dans header
et ça a marché d'une coup simplement en rajoutant les mysql_set_charset('utf8', $$link); dans fonction/database

Je n'ai pas fait de changement dans les trim().... à moins de l'avoir fait au passage en 5.3

Ça semble bien marcher coté boutique publique sans passer à UTF8 (pour plus tard tant qu'à faire).

En tous cas, merci d'avoir soulever le problème qui m'a permis de faire les corrections.

Écrit par : nephelion 10 Oct 2015, 17:04

bonjour à tous,
Désolé de déterrer ce vieux post,
@skieur disait :

Citation (skieur @ 7 Jan 2014, 05:40) *
Déjà j'ai vu dans le code de le page orders.php que l'on était en iso8859 il faut commencer par là non ? Je veux dire le passeer en utf8, mais il faut aussi le faire sur la base de donnée ?

Citation
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html dir="ltr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">





mais dans la page orders.php chez moi, il y a ça :

Citation
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
-----
</head>


ma question est : où est défini CHARSET ? comme TITLE ou HTML_PARAMS ....
j'ai un trou wink.gif
je retourne les fichiers dans tous les sens

Merci

Écrit par : Bonbec 10 Oct 2015, 22:01

Bonsoir,

Cela se trouve dans les fichiers de langue : catalog/includes/languages/french.php par exmple pour la langue française.

Écrit par : nephelion 11 Oct 2015, 10:00

Bonjour et Merci @Bonbec,

Je m'atèle au passage php5
un peu en retard mais ... wink.gif

je vais sûrement rencontrer des problèmes et je vais revenir vous appeler à l'aide.


Écrit par : FEC 30 Sep 2016, 21:28

Citation (skieur @ 7 Jan 2014, 04:40) *
Déjà j'ai vu dans le code de le page orders.php que l'on était en iso8859 il faut commencer par là non ? Je veux dire le passeer en utf8, mais il faut aussi le faire sur la base de donnée ?

Citation
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html dir="ltr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">



Bonjour,

Je suis en train de passer à php5.4, tous va bien sauf passage en UTF-8: sous php5.4, il y a des problèmes d’affichage pour lettres accentués, et le symbole € n’affiche pas correctement non plus.

J’ai essaie de regarder mon database :

Code
character_set_database     latin1

Voila mes questions:
1. Est-ce que il faut changer « latin1 » à « utf-8 » ?
2. Comment faire pour changer « latin1 » à « utf-8 » ?
3. Est-ce que il y a d’autre chose à corriger dans database ?
4. Comment faire pour « passer un fichier en UTF-8 sans BOM » ?

Pouvez vous me dire comment faire ? Merci beaucoup pour votre gentille aide.


Écrit par : scientoufik 2 Jan 2018, 00:56

Bonjour,

J'ai une version de osCommerce Online Merchant v2.2 RC1 W3C Valid FR et une version php 4.4.9 et je souhaite passer à une version de PHP >= à la 5.4.0.

J'ai vu sur mon hebergeur OVH que je pouvais choisir la version de PHP pas de pb jusque là.

J'ai aussi vu differents posts dans le forum qui parlaient de modifications à faire. Je n'ai pas tout compris car c'était plus des réponses à des problèmes rencontrés.

Quelqu'un peut il me guider et me donner les étapes à réaliser svp?

Merci d'avance.



Écrit par : Theday06 8 Feb 2018, 08:02

Attention au version!!


OVH Dit

Il est conseillé d’utiliser les versions les plus récentes de PHP (5.6 ou 7.0) pour profiter des meilleures performances et d’une sécurité renforcée. L’usage des versions obsolètes de PHP (5.4, ou 5.5) est fortement déconseillé et vous expose à des possibles failles de sécurité.


PHP 7.0 (version par défaut, meilleures performances)
PHP 5.6 (supportée jusqu’au 31-12-2018)
PHP 5.5 (obsolète, non recommandée)


https://docs.ovh.com/fr/hosting/activer-loptimisation-php-sur-son-hebergement-mutualise-ovh/

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)