如何删除镜像名称中的空格并保存新文件

时间:2012-05-24 作者:Dave

我正在使用一个名为“wordpress”的插件Add Linked Images To Gallery“为了保存发布在我网站上的图像的本地副本,我将所有文件上载到其他主机,并在本地主机中测试此插件,以查看它是否起作用。

What does this plugin do :
该插件搜索站点中发布的外部图像,保存本地副本,并将HTML代码中的旧图像地址替换为本地的新图像地址。

What is the problem :
在本地主机上测试插件时,我注意到该插件无法正确保存文件名上有“空格”的图像。例如:

这是一幅图像。巴布亚新几内亚

不会显示在博客中,而是以正确的方式显示:

此%2520是%2520和%2520映像。巴布亚新几内亚

正如您所看到的,空白被替换为“%2520”,我不知道为什么会发生这种情况,但图片不会显示在博客中

我试图修改此插件,使其自动将图像文件中的空白替换为“\\”,我查看了源代码,发现这一行:

    $content = preg_replace(\'/(<img[^>]* src=[\\\'"]?)(\'.$trans.\')/\', \'$1\'.$imgpath, $content);
我认为这是替换图片的原因,但当我修改它时,它删除了帖子内容和图片

是否可以修改此插件,使其先替换文件名中的空白,然后保存本地副本,然后在博客中使用该本地副本

谢谢

2 个回复
SO网友:fuxia

使用sanitize_file_name( $filename ). 此函数不仅捕获空白,还删除其他特殊字符:

$special_chars = array(
    "?", "[", "]", "/", "\\\\", "=", "<", ">", ":", ";", ",", 
    "\'", "\\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", 
    "!", "{", "}", chr(0)
);
在插件代码中找到以下行:

$id = media_handle_sideload($file_array, $post_id, $desc);
在此行的正上方添加:

$file_array[\'tmp_name\'] = sanitize_file_name( $file_array[\'tmp_name\'] );
警告:我还没有测试过。

确保重命名插件和插件的文件名。否则会收到升级通知。并联系author, 请他实施这些更改。

SO网友:user983248

尝试替换:

rename($file_array[\'tmp_name\'], $file_array[\'tmp_name\'] . $ext);
使用:

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

Not tested

结束

相关推荐

如何理解ACTIVE_PLUGINS OPTION_VALUE从数据库中启用和禁用某些插件?

谁能解释一下如何解释和理解WordPress中的active\\u plugins option\\u value字符串吗。然后使用此字符串/数组禁用和激活特定插件?以下是一个示例:a:8:{i:0;s:21:\"adrotate/adrotate.php\";i:1;s:19:\"akismet/akismet.php\";i:2;s:33:\"better-related/better-related.php\";i:3;s:17:\"clicky/clicky.php\";i:4;s:49:\"cu