vnsdks / slug-generator
Slug 生成器
Requires
- php: ^7.0
- ext-intl: *
- ext-mbstring: *
- ext-pcre: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.4
- phpunit/phpunit: ^6.2
- satooshi/php-coveralls: ^1.0
This package is not auto-updated.
Last update: 2024-09-29 06:14:18 UTC
README
这个库提供生成 URL、文件名或其他具有有限字符集的目标的 slugs 的方法。它基于 PHP 的 Transliterator 类,该类使用 CLDR 的数据在不同脚本(例如,西里尔字母到拉丁字母)或类型(例如,大写到小写或从特殊字符到 ASCII)之间转换字符。
使用方法
$generator = new SlugGenerator; $generator->generate('Hello Wörld!'); // Output: hello-world $generator->generate('Καλημέρα'); // Output: kalemera $generator->generate('фильм'); // Output: film $generator->generate('富士山'); // Output: fu-shi-shan $generator->generate('國語'); // Output: guo-yu // Different valid character set, a specified locale and a delimiter $generator = new SlugGenerator((new SlugOptions) ->setValidChars('a-zA-Z0-9') ->setLocale('de') ->setDelimiter('_') ); $generator->generate('Äpfel und Bäume'); // Aepfel_und_Baeume
安装
要安装此库,请使用 Composer 或从 GitHub 下载源文件。
composer require vnsdks/slug-generator
为什么还要创建另一个 slug 库,不是已经有足够的了吗?
已经有很多代码片段和一些很好的库可以创建 slugs,但我没有找到任何满足我要求的东西。选项通常非常有限,这使得针对不同的用例进行定制变得很困难。一些库携带大量的规则集,试图将字符转换为 ASCII,没有人使用 Unicode 的 CLDR,它是转写规则的行业标准以及许多其他转换。但最重要的是,没有库能够进行“正确”的转换,比如“Ö-Äpfel”到“OE-Aepfel”用于德语或“İNATÇI”到“inatçı”用于土耳其语。
选项
所有选项都可以为生成器对象本身设置 new SlugGenerator($options)
或在调用 generate($text, $options)
时覆盖。选项可以作为数组或作为 SlugOptions
对象传递。
delimiter
,默认 "-"
分隔符可以是任何字符串,它用于分隔单词。它从 slugs 的开头和结尾被移除。
$generator->generate('Hello World!'); // Result: hello-world $generator->generate('Hello World!', ['delimiter' => '_']); // Result: hello_world $generator->generate('Hello World!', ['delimiter' => '%20']); // Result: hello%20world
validChars
,默认 "a-z0-9"
允许在 slug 中使用的有效字符。正则表达式的字符类语法与相同。例如 abc
、a-z0-9äöüß
或 \p{Ll}\-_
。
$generator->generate('Hello World!'); // Result: hello-world $generator->generate('Hello World!', ['validChars' => 'A-Z']); // Result: HELLO-WORLD $generator->generate('Hello World!', ['validChars' => 'A-Za-z']); // Result: Hello-World
ignoreChars
,默认 "\p{Mn}\p{Lm}"
应该完全删除而不是用分隔符替换的字符。它使用与 validChars
选项相同的语法。
$generator->generate("don't remove"); // Result: don-t-remove $generator->generate("don't remove", ['ignoreChars' => "'"]); // Result: dont-remove
locale
,默认 ""
用于 Unicode 转换的 locale。
$generator->generate('Hello Wörld!'); // Result: hello-world $generator->generate('Hello Wörld!', ['locale' => 'de']); // Result: hello-woerld $generator->generate('Hello Wörld!', ['locale' => 'en_US']); // Result: hello-world
transforms
,默认 Upper, Lower, Latn, ASCII, Upper, Lower
Transliterator
用于将无效字符转换为有效字符的转换规则或规则集。例如 Lower
或 ASCII
,规则集看起来像 a > b; c > d;
。
$generator->generate('Damn 💩!!'); // Result: damn $generator->generate('Damn 💩!!', ['transforms' => ['💩 > Ice-Cream']]); // Result: amn-ce-ream $generator->generate('Damn 💩!!', ['postTransforms' => ['💩 > Ice-Cream']]); // Result: damn-ce-ream $generator->generate('Damn 💩!!', ['preTransforms' => ['💩 > Ice-Cream']]); // Result: damn-ice-cream