vnsdks/slug-generator

Slug 生成器

v1.0.1 2017-11-23 09:46 UTC

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 中使用的有效字符。正则表达式的字符类语法与相同。例如 abca-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 用于将无效字符转换为有效字符的转换规则或规则集。例如 LowerASCII,规则集看起来像 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