Page 1 sur 1

Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 03 févr. 2021, 00:56
par Couin
Couin Couiiiiiinnnn !!!!

Bon, je sèche encore une fois (vais finir en poudre à force ... ).

Un script me permettant de lister l'arborescence de là où je place le fichier du script en question.
Je développe sur WAMP et envoie sur un serveur LAMP qui sert en interne au boulote.

Pour exposer le problème, j'ai fais une version minimaliste :

Code : Tout sélectionner

<html lang="fr"> <head> <title>ScanDir</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <? $fichiers = scandir('./'); natcasesort($fichiers); foreach($fichiers as $fichier) { echo $fichier . "<br>"; } ?> </body> </html>
Avec les noms de fichiers contenants des accents, j'ai un souci :

Sur LAMP, le résutlat est conforme :
.
..
FR_instructions mise à jour FW_QC.doc
Hey patron, j'me suis trompé d'morceau.wav
index.php
Préselection-Fabien-3.xls
Mais sur WAMP, le résultat n’est pas bon :
.
..
FR_instructions mise � jour FW_QC.doc
Hey patron, j'me suis tromp� d'morceau.wav
index.php
Pr�selection-Fabien-3.xls
J'ai essayé avec utf8_encode sur l'echo $fichier, résultat :

WAMP oki :
.
..
FR_instructions mise à jour FW_QC.doc
Hey patron, j'me suis trompé d'morceau.wav
index.php
Préselection-Fabien-3.xls
Mais LAMP plus oki :
.
..
FR_instructions mise à jour FW_QC.doc
Hey patron, j'me suis trompé d'morceau.wav
index.php
Préselection-Fabien-3.xls
J'ai beau testé plein de trucs (changer le charset dans la balise meta, mettre un header dans la partie php, etc etc), quand c'est bon sur un c'est plus bon sur l'autre :tir2:

Mon fichier est fait sous Notepad++ en UTF-8 (et non UTF8-BOM).

Alors certes, LAMP comme WAMP sont vieux (php 5.3.10 pour LAMP et php 5.3.13 pour WAMP) mais pas du tout au gout du jour de tout refaire en version récente (avec php7.x par exemple) car j'ai plein de script qui ne tourneraient plus (car en mysql et non mysqli), mais bon, il y a 10 ans, ces versions php était récentes et le problème aurait été le même.

Qui qu'aurait une idée pour le canard ? :oops:

Merkouin !

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 07 févr. 2021, 06:41
par two3d
Si c'est juste pour "echo" traduit les caractères en entités HTML avec htmlentities()

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 08 févr. 2021, 02:06
par Couin
Coucoutte :)

Merci pour cette réponse.
Je testerais ca au boulote, mais il me semble que j’avais déjà testé.

A suivre donc :)

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 08 févr. 2021, 11:28
par two3d
ta pas déclaré le doctype de ta page:

Code : Tout sélectionner

<!DOCTYPE html>
Puis en utilisant le doctype HTML5, tu peux déclarer ton charset comme suit:

Code : Tout sélectionner

<meta charset="utf-8">
Juste après l'ouverture de la balise <head>

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 08 févr. 2021, 20:42
par Couin
Plop !

Bon, malgré les modification, ce n'est pas mieux :(

Le code modifié :

Code : Tout sélectionner

<!DOCTYPE html> <html lang="fr"> <head> <title>ScanD</title> <meta charset="UTF-8" /> <body> <? $fichiers = scandir('./'); natcasesort($fichiers); foreach($fichiers as $fichier) { echo "SANS HTMLENTITIES : " . $fichier . "<br>"; echo "AVEC HTMLENTITIES : " . htmlentities($fichier) . "<br>"; }?> </body> </html>
Résultat sur le serveur linux LAMP :
SANS HTMLENTITIES : Hey patron, j'me suis trompé d'morceau_2.wav
AVEC HTMLENTITIES : Hey patron, j'me suis trompé d'morceau_2.wav
Résultat sur le serveur windows WAMP :
SANS HTMLENTITIES : Hey patron, j'me suis tromp� d'morceau_2.wav
AVEC HTMLENTITIES : Hey patron, j'me suis trompé d'morceau_2.wav


Ouiiiiinnnnnn lol

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 08 févr. 2021, 21:25
par two3d
htmlentities peut prendre des paramètres, regarde la doc et tente d’utiliser l'"UTF-8"

essaye: htmlentities($chaine,ENT_QUOTES,"UTF-8");

https://www.php.net/manual/fr/function.htmlentities.php

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 08 févr. 2021, 22:26
par Couin
Reu !

Bon bah j'ai essayé plusieurs combinaisons mais toujours pas de résultat :( Un coup rien ne s'affiche sur WAMP, un coup les caractères accentués disparus :(
WAMP m'avait déjà posé des soucis (mysqldump par exemple) du coup ça en fait un de plus, de souci lol

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 08 févr. 2021, 23:09
par two3d
tu fais une condition: si tu es sur linux tu fait en sorte d'utiliser la méthode qui fonctionne sur linux, sinon l'autre

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 09 févr. 2021, 04:41
par Couin
Oui c'est sur mais pour quand c'est une ligne ça va mais quand c’est pour plusieurs pages ça peut vite alourdir le truc :(

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 09 févr. 2021, 09:02
par two3d
Solutions possibles:

1. Linux et Windows ne gère pas identiquement les caractères accentués (à confirmer) pour afficher une chaine avec les accents convertis, tu peux utiliser la fonction remplacerAccent() que tu trouvera sur cette page: https://www.c2script.com/scripts/conver ... g-s18.html

2. Et dans tous les cas, on évite d'avoir des accents et même des guillemets dans un titre. :non:

3. Mettre à jour WAMP et LAMP

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 09 févr. 2021, 09:53
par @rthur
Le problème que tu rencontres vient du fait que tes deux serveurs utilisent un jeu de caractères différents.
Ton serveur Linux te renvoie des noms de fichiers en utf8, alors que ton serveur Windows te les renvoie en ISO-8859-1 ou en CP-1252.

Essaye peut-être de détecter cela avec la fonction mb_detect_encoding();
var_dump(mb_detect_encoding($string, 'UTF-8, CP-1252, ISO-8859-1'));
Et en fonction du résultat tu fais ta conversion ou pas...

Re: Caractères spéciaux et scandir entre LAMP et WAMP

Posté : 12 févr. 2021, 03:35
par Couin
Plop !

Ah bah vais tester ça tout à l'heure au boulote lol

Merkouin !