vieux site avec base en ISO-8859-1 ou windows-1252 vers UTF-8

vieux site avec base en ISO-8859-1 ou windows-1252 vers UTF-8 - PHP - Programmation

Marsh Posté le 30-01-2011 à 23:27:14    

Je suis actuellement en train de refaire tout un site. Je le refais en plusieurs phases :  
Phase 1 : Changement graphique du site, donc changement du code HTML englobant (le contenu interne reste dans un premier temps).
 
J'ai reconvertis tous les fichiers PHP du site en UTF-8, avec déclaration du charset UTF-8, donc là aucun soucis :)
mais le problème vient des données provenant de la base mysql, tout est fucké au niveau des accents.
j'ai fait un import de la base, est-ce que je me suis chié dessus en faisant l'import et que j'aurai du déclaré le fichier en ISO-8859-1 ? ou est-ce que ya moyen que je convertisse toute la base en UTF-8


---------------
Blablaté par Harko
Reply

Marsh Posté le 30-01-2011 à 23:27:14   

Reply

Marsh Posté le 30-01-2011 à 23:37:22    

T'as pensé d'utiliser un truc comme ça : http://dev.mysql.com/doc/refman/5. [...] nvert.html
pour convertir le tout?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 31-01-2011 à 00:07:17    

Et tu aurais un truc pour TOUT convertir d'un coup ?
J'ai la flème de chercher et franchement pas le temps, j'ai 200 fichiers PHP faits à la bite et au couteau à repasser dans un HTML propre.
Du coup la DB j'ai pas envie de me faire chier à cherche :/


Message édité par gatsu35 le 31-01-2011 à 00:08:01

---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 00:08:20    

oh t'arrives pas à écrire une moulinette pour le faire?  
J'ai jamais eu à le faire, désolé


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 31-01-2011 à 00:12:17    

esox_ch a écrit :

oh t'arrives pas à écrire une moulinette pour le faire?  
J'ai jamais eu à le faire, désolé


bah PHP et moi on est pas encore totalement copains, et les fichiers HTML que je tape là sont pas totalement propres ya un peu de merde partout.
Mais ptet que je devrais faire une moulinette, tu as raison :o


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 00:56:43    

edit je viens de modifier le fichier d'import en UTF-8, je redéclare ma base en UTF-8, tout va bien, mais j'ai encore une couille, mes requêtes me crache sur des caractères genre : � :/


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 01:32:49    

Bon j'ai rajoute des mysql_query("SET NAMES UTF8" ) avant chaque requete dans le PHP en plus d'avoir tout convertis dans la base.
 
j'ai suivi ce qui était indiqué ici :  
http://www.aquatz.com/Encodage-con [...] L_a36.html
 
Mais j'avoue franchement, pour l'instant j'y vais en mode crado en plusieurs étapes pour le site, je dois livrer un truc dans 2 semaines et je ocnvertis à l'arrache et les trucs qui m'emmerde je les corrige à la bite et au couteau.  
Le site que je suis en train de corriger est l'exemple même de ce qu'il ne faut pas faire en HTML/JS et surtout PHP. Je corrige des tonnes de merdes.


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 07:40:48    

Me semblait qu'il y avait moyen de mettre "SET NAMES UTF8" en param pour que ça le fasse automatiquement à chaque requête  [:transparency]

Reply

Marsh Posté le 31-01-2011 à 08:23:56    

sur la base  ? j'a rien trouvé, si tu sais ou je suis preneur :o


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 08:35:03    

J'ai rien trouvé non plus, pardon pour le faux espoir  :D

Reply

Marsh Posté le 31-01-2011 à 08:35:03   

Reply

Marsh Posté le 31-01-2011 à 08:41:58    

putain je retrouve des pans entier de code dégueulasse [:tinostar]
Les requetes sql même pas échappées, les login/pass en clair :/
des globals partout, nan mais pourquoi j'ai accepté ça [:tinostar]


Message édité par gatsu35 le 31-01-2011 à 08:42:16

---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 09:06:15    

Les globals c'est dégueu à la base ou c'est à utiliser à bon escient ?

Reply

Marsh Posté le 31-01-2011 à 09:26:21    

C'est dégueulasse, car tu ne fais pas la différence entre du get et du post et même les variables que tu déclares dans ton code peuvent être overwrité par une global.
Enfin bref c'est de la merde les globals, mais je suis obligé de les laisser pour le moment :(
PHP mais pourquoi tu as laissé des milliers de portes ouvertes pour faire du code dégueulasse ?


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 09:51:44    

D'acc, c'était juste pour savoir en fait  :jap:

Reply

Marsh Posté le 31-01-2011 à 10:06:53    

Il y a encore des codes qui marchent avec register_global à on :??:
ça va être la fête du slip quand les serveurs vont commencer à mettre PHP6 :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 31-01-2011 à 10:27:43    

Ben les vieux site de 2006 :/
je suis tombé sur un site merdique et comme le temps est assez compte, je ne change que la charte, c'est contre mes principes de laisser du code de merde, mais je n'ai pas non plus 2 mois pour tout changer.
 
Ya des requetes SQL partout au milieu des pages, du code de merde partout, du JS pour faire des redirections au lieu d'un header:location.
 
Enfin bref, c'est codé par un stagiaire.


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 10:32:34    

C'est pas le stagiaire qu'il faut foutre au bûcher, c'est le maître de stage ...
Ton contrat à la base c'est juste de leur changer la charte? C'est risqué de prendre un contrat comme ça sans savoir si c'est MVC ou pas derrière (et là, qqch me dit que ça l'est pas :D)... Comment tu gères la négociation avec le client?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 31-01-2011 à 10:50:31    

Nop c'est pour un pote qui fait une fleur à quelqu'un de sa famille
 
C'est un site de 200 pages à peu prêts ya un truc un peu générique basé sur des templates, mais c'est mega merdique :D
et puis toute la partie dynamique, accès base and co a été faite à la bite et au couteau.
 
Et on a décidé de faire le site en 2 temps au vue des délais, car refaire tous les contenus pour les foutre dans un CMS c'est un peu long :D
 
Donc pour le moment search and replace massif, même à coup de regexp :D, ça marche bien [:petrus75]


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 11:09:23    

Ah ... les projets faits pour faire une fleur c'est toujours les pires ..
Tu peux pas demander des k€ parce que c'est pour un pote, tu peux pas lui dire que son truc c'est de la merde pour la même raison et tu peux pas l'envoyer se faire foutre :D
Quasiment à chaque fois chez moi ça s'est fini avec une grosse engueulade .. Heureux de plus être confronté à ce genre de trucs :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 31-01-2011 à 14:46:03    

esox_ch a écrit :

Ah ... les projets faits pour faire une fleur c'est toujours les pires ..
Tu peux pas demander des k€ parce que c'est pour un pote, tu peux pas lui dire que son truc c'est de la merde pour la même raison et tu peux pas l'envoyer se faire foutre :D
Quasiment à chaque fois chez moi ça s'est fini avec une grosse engueulade .. Heureux de plus être confronté à ce genre de trucs :D


C'est un site qui a été fait par une société et la personne veut se débarasser de la société en question. Je lui ai bien dit que c'était de la belle merde :D
Comme il paye bien et qu'il peut me rapporter de beaux projets, je lui fait une fleur :D


Message édité par gatsu35 le 31-01-2011 à 14:46:24

---------------
Blablaté par Harko
Reply

Marsh Posté le 31-01-2011 à 15:14:50    

y a une méthode pour convertir qui marche pas trop mal c'est  
* faire un dump (en iso donc)
* convertir le fichier en UTF8 avec iconv
* quelque regex pour replacer les iso par du set utf8 collate utf8_general_ci;
* ré-importer

Reply

Marsh Posté le 31-01-2011 à 16:05:36    

esox_ch a écrit :

Il y a encore des codes qui marchent avec register_global à on :??:
ça va être la fête du slip quand les serveurs vont commencer à mettre PHP6 :D


 
On m'avait conseillé ça à une époque  :D

Reply

Marsh Posté le 31-01-2011 à 16:10:34    

Putain le register_global, ici on n'a réussi à tout purger dans la boite sauf un dernier projet dont j'ai encore la charge.  
 
Je fais tout pour que ce projet meure mais le client y semble attaché, faut dire aussi que c'est son intranet [:cupra]

Reply

Marsh Posté le 31-01-2011 à 17:22:05    

t'as essayé ça ?  
mysql --default-character-set=utf8 base_de_donnees -h host -u user -ppass < fichier_dump


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 31-01-2011 à 17:41:04    

le problème est réglé les mecs hein :o
et c'était un dump en ISO-8859-1, je l'ai converti en UTF-8, j'ai importé la base en UTF-8 et je foutu des mysql_query("SET NAMES UTF-8" ) un peu partout et basta.
J'ai même pas envie de me faire chier avec ce site, sachant qu'on va le passer sous CMS dans 2 mois.

 

Pour le moment on doit juste tomber une version statique à l'arrache.


Message édité par gatsu35 le 31-01-2011 à 17:41:25

---------------
Blablaté par Harko
Reply

Marsh Posté le 01-02-2011 à 10:47:37    

Ca sert à rien de mettre des mysql_query("SET NAMES UTF-8" ) partout, suffit de le faire 1 fois juste après la connexion à la base.
 
Si tu utilises une classe/fonction pour te connecter et effectuer tes requêtes, tu dois pouvoir facilement factoriser ça :o
 
:hello:

Reply

Marsh Posté le 01-02-2011 à 11:48:57    

Alisteroid a écrit :

Ca sert à rien de mettre des mysql_query("SET NAMES UTF-8" ) partout, suffit de le faire 1 fois juste après la connexion à la base.
 
Si tu utilises une classe/fonction pour te connecter et effectuer tes requêtes, tu dois pouvoir facilement factoriser ça :o
 
:hello:


Si j'avais codé le site ça serait le cas, il y aurai même que 2 fichiers PHP et tout le reste en XSL.
Mais je suis sur un vieux site où tout a été fait à la bite et au couteau :o, donc ya 60 requetes au moins sur le site :o


---------------
Blablaté par Harko
Reply

Marsh Posté le 21-02-2011 à 13:16:47    

Yo !  
Qu'est ce que t'as à dire des gros à chaque phrase comme ça ?
Y a ma meuf qui vient parfois faire des recherches sur ce site, et je voudrais pas que ton langage choque
son âme sensible !
Capitch ? :heink:

Reply

Marsh Posté le 21-02-2011 à 18:52:56    

avantgarde a écrit :

Yo !
Qu'est ce que t'as à dire des gros à chaque phrase comme ça ?
Y a ma meuf qui vient parfois faire des recherches sur ce site, et je voudrais pas que ton langage choque
son âme sensible !
Capitch ? :heink:


Mais gamin, qu'est ce que tu viens foutre sur ce topic, et où est-ce que tu vois que je dis des "gros" ?
Et qu'est-ce qui te permet de me faire la morale ?
Edit : Et j'en ai rien à branler de ta meuf, si elle vient sur ce forum, elle vient pas sur les topics où je suis un point c'est tout !!!

 


Message édité par gatsu35 le 21-02-2011 à 23:38:39

---------------
Blablaté par Harko
Reply

Marsh Posté le 22-02-2011 à 10:20:18    

laisse tomber c'est un spam, j'ai vu d'autre message du style ;)
sinon si t'as possibilité sur ton site fait plutôt un mysql_set_charset

Reply

Marsh Posté le 22-02-2011 à 11:04:15    

gatsu35 a écrit :

C'est dégueulasse, car tu ne fais pas la différence entre du get et du post et même les variables que tu déclares dans ton code peuvent être overwrité par une global.
Enfin bref c'est de la merde les globals, mais je suis obligé de les laisser pour le moment :(
PHP mais pourquoi tu as laissé des milliers de portes ouvertes pour faire du code dégueulasse ?


Si tu codes en PHP 5.3 et suit les recommandations et n'utilise aucun truc deprecated y'a plus vraiment de portes ouvertes... ;)
 
Les $GLOBALS peuvent avoir un intérêt... Encore faut-il les utiliser à bon escient et ne pas les confondre avec la session où un fichier de config... :o


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 22-02-2011 à 11:18:38    

tu ne m'apprends rien, j'ai juste pas envie de perdre mon temps à refaire du code de merde, car ce n'est pas le but


Message édité par gatsu35 le 22-02-2011 à 11:22:02

---------------
Blablaté par Harko
Reply

Marsh Posté le 22-02-2011 à 11:21:19    

Bah si ton but c'était d'en faire le moins possible, la vrai solution c'était simplement de faire un header XHTML correct en notifiant le vrai charset de la page... :spamafote:
 
Parce que bon, je ne vois pas le soucis d'être en latin-1 si c'est temporaire et que le contenu reste du latin-1 à la base... :??:


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 22-02-2011 à 11:22:39    

MEI a écrit :

Bah si ton but c'était d'en faire le moins possible, la vrai solution c'était simplement de faire un header XHTML correct en notifiant le vrai charset de la page... :spamafote:
 
Parce que bon, je ne vois pas le soucis d'être en latin-1 si c'est temporaire et que le contenu reste du latin-1 à la base... :??:


nop déclarer le charst ne suffit pas, il faut encoder les fichiers ainsi que les data de la base :/


---------------
Blablaté par Harko
Reply

Marsh Posté le 22-02-2011 à 11:23:41    

MEI a écrit :

Bah si ton but c'était d'en faire le moins possible, la vrai solution c'était simplement de faire un header XHTML correct en notifiant le vrai charset de la page... :spamafote:
 
Parce que bon, je ne vois pas le soucis d'être en latin-1 si c'est temporaire et que le contenu reste du latin-1 à la base... :??:


nop déclarer le charst ne suffit pas, il faut encoder les fichiers ainsi que les data de la base :/
 
Le site va être repassé dans un CMS complet dans quelques mois, mais là c'est juste qu'il doit être propre (en gardant les contenus) avec sa nouvelle charte avant mi-mars. Et ensuite on le passe dans un CMS avec retapage de tous les contenus (qui sont eux aussi dégueulasses)


---------------
Blablaté par Harko
Reply

Marsh Posté le 22-02-2011 à 11:24:13    

Tout à fait, si le charset en base ou celui utilisé durant la connexion entre mysql et le navigateur est pas le bon, mettre juste un charset dans le header du html ne suffit pas.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-02-2011 à 11:32:02    

J'ai lu la doc, en 2 min, et en fait il suffisait de faire :

Code :
  1. mysqli::set_charset($charset); // si MySQLi valable pour tout le temps
  2. // ou
  3. mysql_set_charset($charset); // après cnx si MySQL


:??:
 
Je me disais bien que MySQL devait avoir une fonction pour choisir le charset client...


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 22-02-2011 à 12:10:48    

j'ai fait un set_names d'apres ce que j'avais lu sur le net et avant la requete, et aussi passer la base en utf-8, ce qui est mieu


---------------
Blablaté par Harko
Reply

Marsh Posté le 22-02-2011 à 13:01:14    

gatsu35 a écrit :

j'ai fait un set_names d'apres ce que j'avais lu sur le net et avant la requete, et aussi passer la base en utf-8, ce qui est mieu


cf. : http://php.net/manual/fr/function. [...] harset.php

Citation :


Note:
 
Cette fonction est la meilleure façon de modifier le jeu de caractères. Il n'est pas recommandé d'utiliser la fonction mysql_query() avec une requête du type SET NAMES .. pour cela.



---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 22-02-2011 à 13:18:08    

MEI a écrit :

J'ai lu la doc, en 2 min, et en fait il suffisait de faire :

Code :
  1. mysqli::set_charset($charset); // si MySQLi valable pour tout le temps
  2. // ou
  3. mysql_set_charset($charset); // après cnx si MySQL


:??:
 
Je me disais bien que MySQL devait avoir une fonction pour choisir le charset client...


 
http://forum.hardware.fr/hfr/Progr [...] m#t2058620  ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed