heimrichhannot / contao-filename-sanitizer-bundle
此扩展包提供了清理文件名的功能,即替换不希望存在的字符,如空格、非ASCII字符等(例如在将它们上传到CMS时)。
2.4.1
2022-02-03 10:41 UTC
Requires
- php: ^7.4||^8.0
- contao/core-bundle: ^4.9
- heimrichhannot/contao-multi-column-editor-bundle: ^2.13
- symfony/config: ^4.4||^5.0
- symfony/console: ^4.4||^5.0
- symfony/event-dispatcher: ^4.4||^5.0
- symfony/http-kernel: ^4.4||^5.0
Requires (Dev)
- contao/manager-plugin: ^2.0
- contao/test-case: 1.1.*
- friendsofphp/php-cs-fixer: ^2.2
- php-http/guzzle6-adapter: ^1.1
- php-http/message-factory: ^1.0.2
- phpunit/php-token-stream: ^1.4||^2.0||^3.0
- phpunit/phpunit: >=6.0 <6.5
- phpunit/phpunit-mock-objects: ^4.0||^5.0
- satooshi/php-coveralls: ^2.0
- symfony/phpunit-bridge: ^3.2
README
此扩展包提供了清理文件名的功能,即替换不希望存在的字符,如空格、非ASCII字符等(例如在将它们上传到CMS时)。
特性
- 使用Contao文件管理器上传文件时清理文件名
- 使用Contao文件管理器保存给定文件时清理文件名
- 可配置的清理规则
- 有效的字母表(最终有效的字符 -> "白名单")
- 修剪
- 替换重复的(连续的)连字符或下划线
- 服务还适用于除文件上传以外的各种其他用例
- 定义一组1:1字符替换(对于德语重音符号很有用,例如ä > ae)
- 使用
SanitizeCommand
来清理系统中已存在的文件/文件夹的文件名,并自动创建htaccess重写规则,以保持深链接正常工作
安装此扩展包后的默认清理规则
在Contao的全局设置中进行配置
安装
通过Composer安装:composer require heimrichhannot/contao-filename-sanitizer-bundle
并更新您的数据库。
配置
您可以在全局Contao设置下的“文件名”中配置清理规则。
重要提示
清理何时进行?
在不同的场景中,文件名清理(影响文件和文件夹)会发生
- 通过Contao文件管理器上传新文件(当然,通过FTP上传的文件不包括在内)
- 使用Contao文件管理器保存已存在的文件。
- 使用Contao文件管理器保存已存在的文件夹。 文件夹内的文件不会自动清理!
- 通过使用命令
huh_filename_sanitizer:sanitize
。更多详情请见下文。
关于已存在的文件和文件夹以及指向这些文件和文件夹的链接怎么办?
重要:当保存已存在的文件或文件夹时,会应用清理规则。
文件或文件夹通过二进制UUID在系统中建立链接
如果您的示例中使用了fileTree
小部件(文件选择器),或者使用了类似{{file::some-hash-uuid}}
的插入标签,那么情况就是这样的。
在这种情况下,即使清理已经完成,链接仍然会工作,因为链接是通过存储在数据库中的不可变二进制UUID进行的。
文件或文件夹通过硬编码的路径在系统中建立链接
系统中已存在的文件和文件夹
注意:在文件名清理使用后,未通过UUID链接的文件是无效的。
在这种情况下,您需要创建htaccess规则,将旧路径重定向到新路径。
文件或文件夹是从系统外部链接的
在这种情况下,当然始终是硬编码的路径。在这种情况下,您需要创建htaccess规则,将旧路径重定向到新路径。
命令
清理命令
此命令设计用于批量处理清理现有文件。请谨慎使用!
特性
- 处理文件或文件夹(通过传递一个用管道符("|")分隔的ID或路径列表)
- 作为dry-run运行以查看如果执行命令将会做什么
- 生成一组htaccess规则,将旧路径重定向到新路径(传递一个
域名
)
用法
vendor/bin/contao-console huh_filename_sanitizer:sanitize [options]
选项
--dry-run[=DRY-RUN] See what the command would do [default: false]
--ids[=IDS] Pass in one or a comma separated list of IDs (tl_files.id); example: 1,2,3
--paths[=PATHS] Pass in one or a *pipe* separated list of paths (relative to the Contao root directory); example: files|files/some-folder|files/Hello, John
-R, --recursive[=RECURSIVE] Also process files/folders inside folders [default: false]
--domain[=DOMAIN] The domain for the htaccess rewrite rules