[PHP]Traitement d'1 nom de fichier(URL) avec espaces(%20), accents

Salut.

Je viens de découvrir un petit problème sur mon site, que j’aimerais résoudre au plus vite !

J’ai des formulaires qui permettre d’entrer des noms de fichier.

C’est un site pour un groupe de musique donc par exemple sur la page “Ajouter un Mp3” ils ajoutent “/Mp3/Groupe - Chanson.mp3”.

Avant je me contentais de remplacer les espaces par “%20”, mais je n’avais pas pensé que les accents, apostrophes…etc pouvaient également poser problème.

Existe-t-il une fonction PHP permettant d’encoder (et éventuellement décoder) ces noms de fichiers ?

Sinon où trouver la liste de tous les caractères à modifier ?

Merci :slight_smile:

urlencode

bah…non, ou alors je ne l’utilise pas comme il faut !
[fixed]…/Maquettes/AN LAH SHOQUE - La lune.mp3[/fixed]me donne ça avec urlencode :[fixed]…%2FMaquettes%2FAN+LAH+SHOQUE±+La+lune.mp3[/fixed]alors que j’aimerais avoir ça :[fixed]…/Maquettes/AN%20LAH%20SHOQUE%20-%20La%20lune.mp3[/fixed]

je vais tester : rawurlencode

EDIT : ça fonctionne mieux, sauf que les “/” sont également remplacés (ce qui est normal) ce que je ne désire pas donc je vais bidouiller !

c pour quoi faire exactement ?

sinon htmlentities

Pour mettre des fichiers en téléchargement.
En fait ils uploadent leurs chansons par FTP, dans l’interface admin ils indiquent le chemin du fichier, une petite description, quelques infos…etc.

donc le nom du fichier sur le serveur reste inchangé ?

t’as raison c plutoto rawurlencode :slight_smile:

Voilà comment je procède :
[fixed]$fichier = rawurlencode ( $fichier ) ;
$fichier = str_replace ( ‘%2F’ , ‘/’ , $fichier ) ;[/fixed]
Le seul problème que j’ai maintenant, c’est que si un fichier comprend un accent (comme dans “humanité” ou dans “métissée”), ils disparaissent quand on télécharge le fichier (“humanit” ou “mtisse”)

Je ne pense pas qu’il y ait moyen de contourner ce problème donc peut être que dans le prochaine version du site j’écrirai une fonction qui remplace les accents dans les noms de fichier par la lettre correspondante sans accent.