8797 sujets

Développement web côté serveur, CMS

Bonjour à tous.

1. J'ai envoyé un fichier sur mon serveur avec un nom avec apostrophe et du coup je n'arrive plus à le supprimer. J'ai donc demandé à l'hébergeur de le supprimer, mais n'existe-t-il pas un moyen pour que je puisse le supprimer moi-même ?

2. Je veux donc prévenir ce type d'incident. J'ai vu que les noms de fichier avec espace ou accents ne posaient pas problème. Existe-t-il d'autres caractères à problèmes ?

3. Comment remplacer dans un formulaire PHP le nom $nom_fichier pour qu'il soit conforme ? Par exemple :
$nom_fichier = "L'âme l'Abricot.docx";

Je ne trouve rien sur Internet de bien concluant.

Et là, mon hébergeur va commencer à criser avec tous les fichiers que je lui demande d'effacer depuis ce matin. Smiley biggrin

Merci pour vos explications.
Modifié par Pyanepsion (05 Jul 2012 - 15:10)
je te file une petite fonction que j’utilise constamment pour renommer les noms de fichiers uploadés.
Ca met tout en minuscules, ça vire les caractères spéciaux et accentués, ainsi que els caractères de ponctuation ou autre.


function cleanName($str, $charset='utf-8')
{

    
    $str = htmlentities($str, ENT_NOQUOTES, $charset);
    $str = strtolower($str);
    $str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ'
    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
    $interdit = array(".", ",", ":", "!", "?", "/", "(", ")", " ", "--", "---", "'");
    $str = str_replace($interdit, "-", $str);
    
    return $str;
}

Modifié par xirt (05 Jul 2012 - 17:25)
C'est bien mieux que ce que j'avais trouvé... et qui ne remplace pas correctement les lettres accentuées.

Merci Xirt Smiley biggrin

//	$nom_fichier = strtr($nom_fichier,
	'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
	'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
	$nom_fichier = str_replace("'",'-',strip_tags(stripslashes(preg_replace('/([^.a-z0-9]+)/i', '-', $nom_fichier))));
@Xirt : finalement non. Ta routine laisse les apostrophes.
Il faut supprimer les barres obliques inversées avant les remplacements.


	$str = htmlentities($str, ENT_NOQUOTES, $charset);
	$str = strtolower($str);
	$str = stripslashes($str);

Modifié par Pyanepsion (05 Jul 2012 - 18:34)

  function slugify($string, $charset = 'UTF-8') {
    $string = htmlspecialchars_decode($string);
    $string = iconv($charset, 'ASCII//TRANSLIT', $string);
    $string = preg_replace('/[^A-Za-z0-9]+/', '-', $string);
    $string = trim($string, '-');
    $string = mb_strtolower($string);

    return $string;
  }
@jb-gfx : ta routine remplace malheureusement les lettres accentuées par un simple trait d'union. En tout cas, belle routine. Merci.
Modifié par Pyanepsion (05 Jul 2012 - 18:37)
Je te file la version complète en 2 fonctions, celle là fonctionne à coup sûr et même si tu reçois des noms de fichiers en russe. Smiley smile

Le forum aime pas certains caractères alors j'ai mis la source ici :

http://pastebin.com/q6EjX3QG

Utilisation : $nom_de_fichier_propre = slugify($nom_de_fichier);
Modifié par jb_gfx (05 Jul 2012 - 18:53)
Oui, mes pages sont bien en UTF-8. C'est dans le commun de chacune de mes pages ainsi que tu peux le voir en allant sur Alyse.

a écrit :
Réponse HTTP
HTTP/1.1 200 OK
Set-Cookie: mailplan=R3858535896; path=/; expires=Sun, 08-Jul-2012 05:06:16 GMT
Date: Thu, 05 Jul 2012 16:51:45 GMT
Server: Apache/2.2.X (OVH)
X-Powered-By: PHP/5.3.10
Cache-Control: max-age=7200
Expires: Thu, 05 Jul 2012 18:51:45 GMT
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 12244
Content-Type: text/html; charset=utf-8

Requête HTTP
GET /boutique/test.php HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; alyze.info)
Host: monsite.fr
Accept-Encoding: gzip
Accept-Language: fr,en,en-us
Accept: plain/text, text/xml, text/html, application/xhtml+xml

Modifié par Pyanepsion (05 Jul 2012 - 19:14)
Impeccable. Voilà qui va également faire plaisir à mon amie ukrainienne. Smiley biggrin

Au final, un fichier qui se prénomme : L'Hôàn,à.docx devient bien 20120705-191212-l-hoan-a-.docx

Smiley murmure J'ai ajouté l'horodatage pour différencier plusieurs versions, car mes clients ont tendance à tous appeler leurs fichiers : introduction.docx ou encore thèse.docs.
Modifié par Pyanepsion (05 Jul 2012 - 19:21)