Je sais qu'il y a pas mal de sujet sur les problèmes d'accent avec les caractères accentués, mais tous ceux que j'ai trouvé tourne à peu de chose près sur un problème d'affichage par rapport à la base de données, ou par rapport au fait que toute la chaine (page php, BDD et Apache) n'était pas rigoureusement tous en utf-8... et ça ne résout pas mon problème..
Bref je vous explique donc mon soucis : Je développe sur Windows avec un serveur type wamp (UwAmp pour être précis) sur lequel j'ai Apache v 2.4.29, php en version 5.6.32 et Mysql en 5.7.19. et j'ai un serveur de "recette" sur un linux avec php 5.6.31, également apache 2.4.10 et un serveur de prod sur ovh (également php 5.6) tous deux sous linux donc.
Toute mes bases de données sont en utf-8, dans mes pages php j'ai le header("content-type:text/html; charset=utf-8" ) et je précise bien que sur les serveurs Linux avec le même code php aucun problème (en base, à l'affichage et sur le serveur les accents sont bien là).
Donc je cherche coté configuration Wamp mais là je sèche...
Mais je n'ai pas de problème au niveau base de données les accents passent bien, à l'affichage aussi après il sont bien retranscrit, mon problème est au niveau de la "recopie" du fichier dans le répertoire du serveur.
Sache que sous Windows, le système de fichiers est historiquement dans un jeu de caractères propre à Windows pour l'Europe de l'Ouest (OEM 850 ou 852 ou encore Windows-1252 je ne sais plus exactement, mais ce n'est pas du multi-octets comme UTF-8). Du coup, vu que tu travailles en UTF-8, il y a certains caractères qui vont en devenir deux pour le système de fichiers…
Je ne sais pas si sous Windows 10 ils n'auraient pas changé quelques trucs à ce sujet, mais je suis certain que si ce n'est pas déjà fait, c'est sur les rails. En attendant, je te conseillerais de faire une translittération vers l'ASCII pour éviter ce genre de souci. Tu peux regarder du côté d'ICU et de la classe PHP Transliterator (oui, un seul t en anglais), ou regarder ce qui est possible avec iconv.
Autrement, tu peux aussi enregistrer le fichier sous un nom "aléatoire" (généré avec uniqid() par exemple) et garder ce nom en base de données, avec le chemin du ficher. A l'affichage et au téléchargement, tu "changes" le nom pour reprendre celui spécifié à l'upload.
Juste pour te dire que si tu utilises mysqli, ce n'est pas non-plus conseillé d'utiliser la requête SET NAMES … pour spécifier le jeu de caractères de la connexion. Il y a une méthode mysqli_set_charset() qui n'existerait pas sans ça
OK, j'avais donc bien compris que windows n'aimait pas l'utf-8.
J'avais effectivement regardé du coté de iconv et j'arrive bien à transformer le nom du fichier (en base ou avant l'upload) pour que ça fonctionne sous windows, mais après si je mets en recette ou prod ce même code ça ne fonctionne plus (il faudrait que je rajoute une détection du type de serveur sur lequel on se trouve avant de lancer telle ou telle fonction...)
Enregistrer le fichier sous un nom aléatoire (...) je n'y avais pas penser, j'avais juste pensé à enlever les accent avec un preg_filter mais ça ne me convenait pas.. Et comment "rechanger" le nom pour que le client ai le bon? parce que comme fichier ils peuvent avoir des jpg ou des pdf et ça quand ça s'affiche avec les mauvais nom et que la personne n'a plus qu'a faire enregistrer le pdf ou l'image et bien "on n'a pas le temps" de renommer le fichier
Bien le coup du mysqli_set_charsetMerci pour l'info, quand j'avais commencé le projet j’étais tombé sur des forums qui parlaient de 'set names' et je m'étais arrêté là.
@WillyKouassi :
woaw du coup il suffirait que je passe mon wamp en php 7.1 et hop! ?
Bon et bien j'ai finalement passé mon projet de php 5.6 à php 7.1 c'est finalement la solution la plus simple et pour un projet récent autant partir sur un php récent.... et c'est effectivement une des nouveautés de cette version : le support de l'encodage Windows par rapport au projet en utf-8. C'est à la fois génial qu'ils aient apporté cette fonctionnalité, mais étrange qu'elle n'ai pas été apporté plus tôt...
Je suis entrain de tester l'ensemble du projet pour voir si tout fonctionne normalement, si tout est OK je passerai les environnements de recette et prod également, sinon je ferais avec iconv et php_os pour encoder/décoder les noms de fichiers et détecter le système du serveur pour ne faire la conversion du nom que sous windows..
Merci à vous!
Problème d'upload de fichier avec Wamp
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.