sanitize attachment filename

时间:2010-12-22 作者:Dalen

我正在寻找一种方法来清理用户上传的附件的文件名。

我以为wordpress已经做到了,但在一个用户上传了一个包含“°”的附件后,我遇到了问题。这样附件就无法下载。

我发现了这个wp函数:

sanitize_file_name($filename)
有没有办法在

add_attachment
行动?

谢谢

2 个回复
SO网友:t31os

Following on from question comments.

可以在上运行筛选器sanitize_file_name_chars 并将度符号添加到无效字符数组中,但它不会停止上载,只会删除文件扩展名。

但是,您可以添加另一个过滤器来阻止上传,这是一种黑客的方式,方法是额外挂接sanitize_file_name 在上面的一个之后不久发生的过滤器,您可以在那里查看文件扩展名是否存在,如果不存在,您就知道在无效的chars数组中有一个命中,您可以die() 在过滤器内部,这将导致上载过程返回HTTP错误(我想这比无声消亡要好)。

add_filter( \'sanitize_file_name_chars\', \'restrict_filename_chars\' );

function restrict_filename_chars( $special_chars ) {
    $special_chars = array_merge( array( \'°\' ), $special_chars );
    return $special_chars;
}

add_filter( \'sanitize_file_name\', \'die_on_no_ext\' );

function die_on_no_ext( $filename ) {
    global $parts;
    if( $parts < 2 )
        die(-1);
    return $filename;
}
请注意,这不是一个理想的解决方案,我们将看看票证会发生什么情况(我可能只是遗漏了一些东西,我不是文件验证方面的专家)。

NOTE: 过滤器仅确保实际文件名不包含学位符号,而不包含“职位名称”(即附件标题),您需要另一个过滤器来处理附件标题的清理,因为这是由不同的函数和过滤器处理的。

SO网友:fuxia

看看我在插件中是怎么做到的Germanix URL. 我陷入\'sanitize_file_name\', 转换我需要的东西,然后去掉其他东西。这样,文件就可以通过,但文件名是有效的。

我认为这是最好的用户体验:没有数据丢失,没有时间,也不会弹出令人恼火的错误消息。

结束

相关推荐