Remplacer les caractères spéciaux dans les noms de fichiers uploadés (Créer un compte)

  • Statut : non résolu
10 sujets de 1 à 10 (sur un total de 10)
  • Auteur
    Messages
  • #506884
    beninsky
    Participant
    Initié WordPress
    21 contributions

    Bonjour à tous,

    J’ai fait quelques tests sur plusieurs versions de WordPress et PHP (WordPress 3.1 avec PHP4 ou WordPress 3.3 avec PHP 5.3) et je remarque que les accents dans les noms de fichiers uploadés ne sont pas gérés…

    Quand j’upload un fichier avec le nom « j’ai marché à l’ombre.jpg » par exemple, cela se convertie en « jai-marché-à -lombre.jpg » sur le serveur et le lien ne fonctionne pas…

    Est-ce moi qui ai mal configuré quelque chose ou est-ce normal ?

    En effet je suis étonné que WordPress n’ait pas déjà implémenté une fonction permettant de convertir (ou tout simplement d’effacer) les caractères spéciaux dans les noms de fichiers qu’on upload ??

    J’ai « développé » (c’est un grand mot pour le peu de code qu’il y a à écrire) un plugin permettant de convertir les lettres accentués en lettres non accentuès lors de l’upload d’un fichier mais j’ai vraiment l’impression que c’est moi qui ai mal configuré quelque chose..

    Pouvez vous m’aider ?

    Merci !



    PS : J’ai testé rapidement l’offre officielle de blog WordPress et les caractères spéciaux ne sont pas gérés non plus et sont converties en chiffres (j’imagine que c’est une question d’harmonisation vu le nombre de languages à gérer mais quand même…)

    Par exemple « j’ai marché à l’ombre.jpg » devient quelque chose comme « jai-march-052-589-lombre.jpg »

    Pourtant WordPress est réputé pour sa bonne optimisation pour le référencement… Or un fichier appelé « jai-marche-a-lombre.jpg » se référencera beaucoup mieux que « jai-march-052-589-lombre.jpg »

    #821856
    Guy
    Participant
    Maître WordPress
    14817 contributions

    essaye cette fonction : sanitize_file_name

    http://codex.wordpress.org/Function_Reference/sanitize_file_name

    #821857
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    Je me permets de signaler qu’il faut éviter à tout prix ce genre de caractères dans les noms de fichiers.
    Ce n’est pas un problème de wordpress, c’est un problème de serveur. Et éventuellement, dans le cadre de wordpress, de type de caractère de ton blog.

    Tu ne trouveras JAMAIS sur le web des urls reprenant directement la forme « j’ai marché à l’ombre »
    Donc le mieux est de préparer ton fichier en l’appelant j’ai-marche-a-l-ombre
    ou mieux marche-ombre …

    #821858
    Guy
    Participant
    Maître WordPress
    14817 contributions

    ca c’est sur, c’est à proscrire 🙂

    sinon, j’ai testé la fonction que j’avais donné, c’est pas terrible, essaye plutot avec la fonction sanitize_title

    #821859
    beninsky
    Participant
    Initié WordPress
    21 contributions

    Bonjour,

    Merci pour vos réponses,

    Le plugin que j’ai écris ajoute un filtre à la fonction « sanitize_file_name » pour que ça fonctionne mieux mais si « sanitize_title » fait ça en mieux déjà je vais l’utiliser dans mon plugin

    Merci !


    @Lumi
    ère de Lune En fait je trouve ça aberrant de devoir encore faire attention aujourd’hui aux noms de fichiers qu’on envoie sur le net alors que plein de fonctions PHP permettent de régler ce problème

    EDIT: La fonction « sanitize_title » ne convient pas non plus dans les cas extrêmes comme un fichier appelé :

    ‘@éèêëÊË’,aaaàâäÂÄîïÎÏûùüÛÜôöÔÖç’.jpg

    Bon ok c’est extrême mais je préfère tout prévoir…

    Au final mon plugin d’origine fonctionne bien, je pense que je vais le mettre sur le site de WordPress pour avoir des retours

    Merci !

    #821860
    Guy
    Participant
    Maître WordPress
    14817 contributions

    il suffit de regarder un site russe, japonais, chinois ou tout simplement allemand et de vouloir taper le nom d’un fichier écrit avec les caractère spéciaux de la langue pour s’apercevoir que ce conseil n’est pas dénué de sens 🙂

    #821861
    beninsky
    Participant
    Initié WordPress
    21 contributions

    Oui j’aimerais aussi que tout le monde connaisse les standards du web mais malheureusement par expérience en entreprise (je suis responsable informatique) je vois que 99% du temps les utilisateurs ne veulent tout simplement pas se prendre la tête.. (ce que je comprends un peu, la technologie doit être à notre service et pas l’inverse)

    Bref je préfère trouver une solution à ce problème plutôt que de m’habituer à ce problème (surtout sur mon CMS préféré WordPress !)

    #821862
    Guy
    Participant
    Maître WordPress
    14817 contributions

    ben pourquoi ça ne marche pas?

    Tu veux qu’une phrase dénuée de sens deviennent signifiante après le traitement? je ne comprends pas bien ton raisonnement et pourquoi ça ne convient pas.

    apres traitement cela fera

    eeeeeeaaaaaaaaiiiiuuuuuooooc-jpg

    ce n’est pas pire que

    ‘@éèêëÊË’,aaaàâäÂÄîïÎÏûùüÛÜôöÔÖç’.jpg

    #821855
    beninsky
    Participant
    Initié WordPress
    21 contributions

    C’était juste un exemple 😋

    Concrètement j’ai parfois des utilisateurs qui mettent des images avec des accents ou ça peut arriver des caractères plus rares comme « Ê » ou autres

    Par exemple si un fichier s’appelle « Être ou ne pas être.jpg » je veux qu’il devienne « etre-ou-ne-pas-etre.jpg »

    Donc avec mon plugin ça fonctionne c’est parfait 🙂 Apparemment la fonction « sanitize_title » ne prend pas en compte les caractères les plus étranges donc je préfère être sure de tout prendre en compte surtout quand le risque est de finir avec des fichiers inutilisables / non effaçable sur le serveur

    #821863
    Guy
    Participant
    Maître WordPress
    14817 contributions

    C’est pas grave, sanitize_title transforme « Être ou ne pas être » en « etre-ou-ne-pas-etre », mais bon… si ça ne convient pas et que tu préfères avoir « etre-ou-ne-pas-etre », je comprends 🙂

    Je pense que c’est la fonction qui est utilisé pour les slugs et titre des pages et articles dans les permalinks, comme le dit la doc : Despite the name of this function, the returned value is intended to be suitable for use in a URL, not as a human-readable title.

10 sujets de 1 à 10 (sur un total de 10)
  • Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.