web-dev-qa-db-fra.com

Comment supprimer les espaces dans le nom de l'image et enregistrer le nouveau fichier

J'utilise un plugin wordpress appelé " Ajouter des images liées à la galerie " afin de sauvegarder une copie locale des images postées sur mon site. J'ai téléchargé tous mes fichiers dans un hébergement différent et je testais ce plugin dans localhost pour voir s'il fonctionnait correctement.

Que fait ce plugin :
Le plugin recherche les images externes publiées sur le site, enregistre une copie locale et remplace l’ancienne adresse de l’image dans le code HTML par la nouvelle adresse de l’image qui se trouve au niveau local.

Quel est le problème :
Lors du test du plugin dans l'hôte local, j'ai remarqué que ce plugin n'enregistre pas correctement les images comportant des "espaces blancs" sur leurs noms de fichiers. Par exemple :

Ceci est une image.png

ne s'affichera pas dans le blog, c'est la bonne façon de le montrer:

Ceci% 2520is% 2520an% 2520image.png

comme vous pouvez le constater, les espaces sont remplacés par "% 2520". Je ne sais pas pourquoi cela se produit, mais l'image ne s'affiche pas dans le blog.

J'ai essayé de modifier ce plugin pour qu'il remplace automatiquement l'espace blanc dans le fichier image par "_", je regarde le code source et trouve cette ligne:

    $content = preg_replace('/(<img[^>]* src=[\'"]?)('.$trans.')/', '$1'.$imgpath, $content);

qui, je crois, est responsable du remplacement des images, mais lorsque je l'ai modifiée, le contenu et l'image de la publication ont été supprimés.

Est-il possible de modifier ce plugin pour qu'il remplace d'abord l'espace blanc dans le nom du fichier, puis enregistre une copie locale, puis utilise cette copie locale dans le blog?

merci

2
Dave

Utilisez sanitize_file_name( $filename ) . Cette fonction ne capture pas uniquement les espaces, elle supprime également les caractères spéciaux:

$special_chars = array(
    "?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", 
    "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", 
    "!", "{", "}", chr(0)
);

Recherchez la ligne suivante dans le code du plugin:

$id = media_handle_sideload($file_array, $post_id, $desc);

Immédiatement au-dessus de cette ligne, ajoutez:

$file_array['tmp_name'] = sanitize_file_name( $file_array['tmp_name'] );

Avertissement: je ne l'ai pas testé.

Assurez-vous de renommer le plug-in et son nom de fichier. Sinon, vous recevez des avis de mise à niveau. Et contactez l'auteur , demandez-lui de mettre en œuvre ces modifications.

1
fuxia

Essayez de remplacer:

rename($file_array['tmp_name'], $file_array['tmp_name'] . $ext);

Avec:

$newname = strtolower(str_replace(' ', '-', $file_array['tmp_name']));
rename($file_array['tmp_name'], $newname . $ext);

Non testé

0
user983248