Convertir page web en UTF-8

WRInaute passionné
Salut à tous,

J'aimerai convertir un vieux site qui a actuellement comme encodage de mes pages php de ANSI en UTF-8, questions :

1) Existe-il un plugin Notepad++ qui permette de convertir toutes mes pages php, css, js en UTF-8 par lots ?

2) Pour convertir mes pages, dois-je sélectionner dans Notepad++ "Convertir en UTF-8" ou "Convertir en UTF-8-BOM" ?

3) Parfois dans certaines de mes page php j'avais remplacé les accents "é" par "é", devrais-je les remplacé par "é" au lieu de "é" ?

4) Doit-on impérativement convertir les tables MySQL en UTF-8 si je convertis toutes mes pages php en UTF-8 ?

5) Une autre question qui n'a rien à voir avec ce sujet : avec Notepad++ a-t-on la possibilité de voir si notre code php est valide w3 ?

Merci pour vos réponses.
 
WRInaute accro
1) Pas que je sache, mais tu peux le faire en ligne de commande sous Linux (ou WSL Windows ou Cygwin) avec iconv
2) UTF8 sans BOM donc "Convertir en UTF-8"
3) Non
4) Oui c'est mieux sinon tu auras des soucis, n'oublie pas le SET NAMES 'UTF8' (dépend comment tu query la DB)
5) Non, de plus c'est le HTML qui doit être validé, pas PHP.
 
WRInaute passionné
Merci spout.

1) Quels types de fichiers doivent-être convertis en UTF-8 : php, css, js, etc... ?

4) Comment faut-il procéder pour convertir les tables MySQL en UTF-8 ? J'ai une base de données avec plus de 100 tables mais qui est utilisé par 5 sites différents, si je convertis un de mes sites en UTF-8 et que je convertis toutes mes tables en UTF-8 ça va bugger pour mes 4 autre sites qui ne sont pas en UTF-8, non ? Faut-il que je crée une nouvelle base données avec mes tables convertis en UTF-8 ?

5) Existe-t-il un outil qui valide le code html w3 en local (sur notre ordi) ?
 
WRInaute passionné
4) plutôt utf8mb4 pour avoir les merveilleux emojis si populaires désormais.

(par exemple dans ce forum, ça ne marche pas, pour les emojis récents).
 
WRInaute passionné
Merci pour vos réponses.

J'ai MySQL 5.7.23, donc si j'ai bien compris, je rentre dans la console phpMyAdmin le code ci-dessous (en changeant le databasename) :
Code:
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Puis comme j'ai 150 tables, je dois pour chacune de mes tables rentrer ce code (en changeant le tablename) :
Code:
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Comment procéderiez-vous étant donné que j'ai 5 sites (avec beaucoup de pages) connecté sur la même BDD ? Tous ces sites et ma BDD ne sont pas en UTF-8 pour l'instant.

J'ai trouvé ce script python pour convertir par lots les fichiers php, css, js etc... je l'ai testé en local, il fonctionne mais certains de mes fichiers php ne sont pas convertis en UTF-8, j'ai ce message qui s'affiche dans la console de Notepad++, pourquoi il ne me convertis pas tous mes fichiers php ?
Code:
-> Processing C:\Users\PC-Bureau\Desktop\test-site\accueil.php  -> Convertion UTF-8 from ENC8BIT  -> KO !!
 
Dernière édition:
WRInaute passionné
Je suis entrain de changer l'encodage de mes sites, ils étaient en iso-8859-1 et je les passe en utf-8.

J'ai ce code php de connexion à ma base de données MySql :
Code:
$connexion = @new mysqli($host, $login, $pass, $base);
$connexion->set_charset('utf8');
if(mysqli_connect_errno()) {
    printf("Impossible de se connecter à MySQL : %s\n", mysqli_connect_error());
    exit();
}
Si je dis pas de bêtise le utf8 dans $connexion->set_charset('utf8'); n'a pas de tiret entre le t le 8 mais le utf-8 de la balise <meta charset="utf-8" /> a un tiret.

1) Est-ce que le utf8 et le utf-8 sont sensibles à la casse ?

2) Quand doit-on utiliser le utf8 et/ou le utf-8 ?
 
WRInaute passionné
Merci spout.

Autres questions :

1) Lorsque je tape cette requête show variables like 'char%' via phpMyAdmin, j'obtiens :
Code:
character_set_client utf8
character_set_connection utf8
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
Est-ce gênant si le character_set_database est en utf8mb4 alors que les autres sont en utf8 ?

J'ai le character_set_server qui est en latin1 et non pas en utf8, est-ce gênant ?
 
WRInaute passionné
Merci spout.

J'ai un souci avec l'affichage des accents avec les dates en français (par exemple pour "février" le é bug à l'affichage) avec la fonction strftime ça n'affiche pas correctement les accents sur mon ordi mais ça les affichent correctement sur mon serveur dédié (en production), le souci vient donc de ma config sur mon ordi, j'utilise wamp 3.1.4 avec php 7.2.10 et j'ai Windows 7.

si j'ajoute utf8_encode avant la fonction strftime, l'affichage est bon sur mon ordi mais plus sur mon serveur dédié.
Code:
$date_string = utf8_encode(strftime('%d %B %Y', strtotime($post->post_date)));

Sur ce thread, un gars a eu le même problème que moi, il l'a solutionné en tapant locale -a pour trouver les locales disponibles sur mon ordi, mais sur quoi faut-il taper cette commande (quel logiciel utiliser) ?
 
WRInaute passionné
J'ai entré print_r(ResourceBundle::getLocales('')); et j'ai comme retour :
Code:
fr [286] => fr_BE [287] => fr_BF [288] => fr_BI [289] => fr_BJ [290] => fr_BL [291] => fr_CA [292] => fr_CD [293] => fr_CF [294] => fr_CG [295] => fr_CH [296] => fr_CI [297] => fr_CM [298] => fr_DJ [299] => fr_DZ [300] => fr_FR [301] => fr_GA [302] => fr_GF [303] => fr_GN [304] => fr_GP [305] => fr_GQ [306] => fr_HT [307] => fr_KM [308] => fr_LU [309] => fr_MA [310] => fr_MC [311] => fr_MF [312] => fr_MG [313] => fr_ML [314] => fr_MQ [315] => fr_MR [316] => fr_MU [317] => fr_NC [318] => fr_NE [319] => fr_PF [320] => fr_PM [321] => fr_RE [322] => fr_RW [323] => fr_SC [324] => fr_SN [325] => fr_SY [326] => fr_TD [327] => fr_TG [328] => fr_TN [329] => fr_VU [330] => fr_WF [331] => fr_YT [332]
Donc les langues qui conviendraient le mieux seraient la fr [286] ou le fr_FR [301], j'ai donc configurer mon setlocale comme cela :
- setlocale (LC_TIME, 'fr'); : la date est bien en français mais les accents ne s'affichent pas correctement sur mon ordi.
- setlocale (LC_TIME, 'fr_FR'); et setlocale (LC_TIME, 'fr_FR.utf8'); : la date est en anglais dans les 2 cas.

Concernant la commande linux locale -a, j'ai ouvert le logiciel cmd sur mon ordi, mais dans quel répertoire faut-il aller pour entrer cette commande ? Si je l'a tape telle quelle on m'indique que 'locale' n'est pas reconnu en tant que commande interne ou externe
 
WRInaute accro
- setlocale (LC_TIME, 'fr'); : la date est bien en français mais les accents ne s'affichent pas correctement sur mon ordi.
Parce qu'elle n'est pas utf8, donc une date "Février" sera foireuse.

- setlocale (LC_TIME, 'fr_FR'); et setlocale (LC_TIME, 'fr_FR.utf8'); : la date est en anglais dans les 2 cas.
Parce que la locale fr_FR.utf8 n'est pas installée.

Apparemment on px pas avoir de locale utf8 sous Windows: https://stackoverflow.com/a/16120506
 
WRInaute accro
Sous Windows j'ai réussi:
PHP:
<?php
$locale = setlocale(LC_ALL, 'French_Belgium.utf8');
var_dump($locale);
var_dump(strftime('%B', strtotime('01-02-2020')));

$locale = setlocale(LC_ALL, 'French_Belgium');
var_dump($locale);
var_dump(strftime('%B', strtotime('01-02-2020')));

Code:
string(19) "French_Belgium.utf8"
string(8) "février"
string(19) "French_Belgium.1252"
string(7) "fvrier"
 
WRInaute passionné
Merci spout, j'ai essayé ton code mais ça ne marche pas sur mon ordi, les accents sont remplacés par des carrés.

J'ai essayé les variantes ci-dessous mais les accents ne s'affichent pas correctement sur mon PC :
Code:
$locale = setlocale(LC_ALL, 'French_Belgium.utf8');
$locale = setlocale(LC_ALL, 'French_Belgium');
$locale = setlocale(LC_ALL, 'French_France.utf8');
$locale = setlocale(LC_ALL, 'French_France');

J'ai le même souci lorsque j'affiche le résultat de l'envoie un formulaire html, les accents qui étaient dans les champs de mon formulaire sont remplacés par des carrés. En production tout s'affiche correctement, c'est donc sur mon PC que ça va pas, mais que faire ?
 
WRInaute passionné
J'ai trouvé le problème des accents dans mon formulaire, j'avais la fonction php strtolower qui mettait en minuscules les champs de mon formulaire une fois qu'il était posté, il suffit de la remplacer par mb_strtolower et les accents s'affichent correctement.... pas si simple cet encodage utf-8 :( il va falloir que je modifie tous mes formulaires.

Par contre pour le problème d'affichage des dates en français, j'ai pas trouvé de solution pour l'instant.
 
Dernière édition:
WRInaute passionné
Je teste ce code :
Code:
$var = "Salut c'est un échec et màt SUr VÖtrà ça VÜ $ £ % ù @ €";
$nom = mb_strtolower($var);
$nom2 = strtolower($var);
echo "<br><br>nom = $nom<br><br>nom2 = $nom2";

Lorsque j'exécute ce code sur mon ordi chez moi ça donne ça :
Code:
nom = salut c'est mou échec et màt sur vötrà ça vü $ £ % ù @ €

nom2 = salut c'est mou �chec et m�t sur v�tr� �a v� $ � % � @ €
Lorsque j'exécute ce même code sur mon serveur dédié (en production) ça donne ça :
Code:
nom = salut c'est mou échec et màt sur vötrà ça vü $ £ % ù @ €

nom2 = salut c'est mou échec et màt sur vÖtrà ça vÜ $ £ % ù @ €
Pourquoi sur mon ordi la fonction strtolower n'interprête pas comme il faut les accents ?
 
Discussions similaires
Haut