文字列をスラッグに変換します。
ヨーロッパのウィーンの Florian Eckerstorfer によって、多くの偉大な貢献者の協力を得て開発されました。
ae
ä
に置き換わります)。Composer を通じて Slugify をインストールできます。
composer require cocur/slugify
Slugify には、PHP のマルチバイト文字列拡張機能が必要です。通常、PHP のコンパイル中に設定オプション--enable-mbstring
を使用できます。詳細については、PHP ドキュメントを参照してください。
統合にはさらに手順が必要になる場合があります。
スラグを生成します。
use Cocur Slugify Slugify ;
$ slugify = new Slugify ();
echo $ slugify -> slugify ( " Hello World! " ); // hello-world
Slugify
で使用される区切り文字を変更することもできます。
echo $ slugify -> slugify ( " Hello World! " , " _ " ); // hello_world
ライブラリにはCocurSlugifySlugifyInterface
も含まれています。 Slugify
のインスタンスのヒントを入力する必要がある場合は常に、このインターフェイスを使用します。
追加の音訳ルールを追加するには、 addRule()
メソッドを使用できます。
$ slugify -> addRule ( " i " , " ey " );
echo $ slugify -> slugify ( " Hi " ); // hey
Slugify で使用される音訳ルールの多くは、言語に固有です。したがって、これらのルールはルールセットを使用して分類されます。最も人気のあるルールは、デフォルトで特定の順序でアクティブ化されます。どのルールセットをアクティブ化するか、およびアクティブ化する順序を変更できます。異なる言語で矛盾するルールがある場合、順序が重要です。たとえば、ドイツ語ではä
ae
と音訳されますが、トルコ語では正しい音訳はa
です。インターネットではドイツ語がより頻繁に使用されるため、デフォルトではドイツ語の音訳が使用されます。トルコ語の音訳を使用したい場合は、可能性を考慮して選択する必要があります。コンストラクターを作成した後にアクティブ化できます。
$ slugify = new Slugify ();
$ slugify -> slugify ( " ä " ); // -> "ae"
$ slugify -> activateRuleSet ( " turkish " );
$ slugify -> slugify ( " ä " ); // -> "a"
別の方法は、ルールセットとその順序をコンストラクターに渡すことです。
$ slugify = new Slugify ([ " rulesets " => [ " default " , " turkish " ]]);
$ slugify -> slugify ( " ä " ); // -> "a"
利用可能なルールセットのリストは、「リソース/ルール」にあります。
コンストラクターはオプション配列を受け取ります。 rulesets
オプションについてはすでに説明しました。文字を区切り文字で置換するために使用される正規表現を変更することもできます。
$ slugify = new Slugify ([ " regexp " => " /([^A-Za-z0-9]|-)+/ " ]);
(上記の例で使用されている正規表現はデフォルトのものです。)
デフォルトでは、Slugify はスラッグを小文字に変換します。文字列の大文字と小文字を保持したい場合は、 lowercase
オプションを false に設定します。
$ slugify = new Slugify ([ " lowercase " => false ]);
$ slugify -> slugify ( " Hello World " ); // -> "Hello-World"
小文字化は正規表現を使用する前に行われます。小文字の動作を維持したいが、正規表現が大文字と一致する必要がある場合は、 lowercase_after_regexp
オプションをtrue
に設定できます。
$ slugify = new Slugify ([
" regexp " => " /(?<=[[:^upper:]])(?=[[:upper:]])/ " ,
" lowercase_after_regexp " => false ,
]);
$ slugify -> slugify ( " FooBar " ); // -> "foo-bar"
デフォルトでは、Slugify は区切り文字としてダッシュを使用します。別のデフォルトの区切り文字を使用する場合は、 separator
オプションを設定できます。
$ slugify = new Slugify ([ " separator " => " _ " ]);
$ slugify -> slugify ( " Hello World " ); // -> "hello_world"
デフォルトでは、Slugify はスラッグを返す前に先頭と末尾の区切り文字を削除します。スラグをトリミングしたくない場合は、 trim
オプションを false に設定できます。
$ slugify = new Slugify ([ " trim " => false ]);
$ slugify -> slugify ( " Hello World " ); // -> "hello-world-"
オプション配列をslugify()
メソッドの 2 番目の引数として渡すことで、上記のオプションのいずれかをその場で上書きできます。例えば:
$ slugify = new Slugify ();
$ slugify -> slugify ( " Hello World " , [ " lowercase " => false ]); // -> "Hello-World"
次の方法で区切り文字を変更することもできます。
$ slugify = new Slugify ();
$ slugify -> slugify ( " Hello World " , [ " separator " => " _ " ]); // -> "hello_world"
デフォルトのルールを変更せずにカスタム ルールセットをアクティブにすることもできます。
$ slugify = new Slugify ();
$ slugify -> slugify ( " für " , [ " ruleset " => " turkish " ]); // -> "fur"
$ slugify -> slugify ( " für " ); // -> "fuer"
音訳のバグやエラーを報告していただければ、特にその言語や質問のネイティブ スピーカーである場合には、大変感謝いたします。問題で追加の言語を自由にリクエストしてください。ただし、このリポジトリの管理者はすべての言語を話せるわけではないことに注意してください。新しい言語のルールを含むプル リクエストを提供したり、既存の言語のルールを拡張したりできれば、素晴らしいことになります。
新しい言語を追加するには、次のことを行う必要があります。
Resources/rules
に[language].json
作成します。CocurSlugifySlugify::$options
に追加できます。言語を追加した場合でも、既存のすべてのテストに合格する必要がありますphp bin/generate-default.php
を実行します。tests/SlugifyTest.php
に言語のテストを追加します。言語がデフォルトのルールセットに含まれている場合は、テスト ケースをdefaultRuleProvider()
に追加し、そうでない場合は、 customRulesProvider()
に追加します。PRを送信します。どうもありがとうございます。
オープンで歓迎的な環境を促進するという観点から、私たちは貢献者および維持者として、年齢、体の大きさ、障害、民族性、性同一性および表現に関係なく、すべての人にとってハラスメントのない経験としてプロジェクトとコミュニティに参加できるようにすることを誓約します。経験のレベル、国籍、外見、人種、宗教、または性的アイデンティティと指向。
完全な行動規範はここでご覧いただけます。
このプロジェクトは憎しみの余地がありません。何か問題がございましたら、Florian までご連絡ください: [email protected]
Slugify には、Symfony アプリケーションのサービスとして使用できるようにする Symfony バンドルとサービス定義が含まれています。コードはCocurSlugifyBridgeSymfonyCocurSlugifyBundle
にあり、アクティブにするだけで済みます。
Symfony 2 のサポートは Slugify 4.0.0 で削除されました。 cocur/slugify@3
を使用してください。
// app/AppKernel.php
class AppKernel extends Kernel
{
public function registerBundles ()
{
$ bundles = [
// ...
new Cocur Slugify Bridge Symfony CocurSlugifyBundle (),
];
}
}
// config/bundles.php
return [
// ...
Cocur Slugify Bridge Symfony CocurSlugifyBundle::class => [ " all " => true ],
];
これで、アプリケーション内のあらゆる場所 (コントローラーなど) でcocur_slugify
サービスを使用できるようになりました。
$ slug = $ this -> get ( " cocur_slugify " )-> slugify ( " Hello World! " );
このバンドルは、 cocur_slugify
サービスのエイリアスslugify
も提供します。
$ slug = $ this -> get ( " slugify " )-> slugify ( " Hello World! " );
autowire
(Symfony >=3.3) を使用する場合は、次のようにサービスに自動ワイヤーを挿入できます。
public function __construct( Cocur Slugify SlugifyInterface $ slugify )
config.yml
(Symfony 2-3) またはconfig/packages/cocur_slugify.yaml
(Symfony 4) で次の構成設定を設定して、slugify サービスを調整できます。
cocur_slugify :
lowercase : false # or true
separator : " - " # any string
# regexp: <string>
rulesets : ["austrian"] # List of rulesets: https://github.com/cocur/slugify/tree/master/Resources/rules
Twig で Symfony フレームワークを使用している場合は、Symfony 統合をセットアップした後にテンプレートで Twig フィルターslugify
を使用できます (上記を参照)。
{{ ' Hällo Wörld ' | slugify }}
Symfony フレームワークの外で Twig を使用する場合は、まず拡張機能を環境に追加する必要があります。
use Cocur Slugify Bridge Twig SlugifyExtension ;
use Cocur Slugify Slugify ;
$ twig = new Twig_Environment ( $ loader );
$ twig -> addExtension ( new SlugifyExtension (Slugify:: create ()));
Laravel の TwigBridge で Twig フィルターを使用するには、クロージャーを使用して Slugify 拡張機能を追加する必要があります。
// laravel/app/config/packages/rcrowe/twigbridge/config.php
' extensions ' => array (
//...
function () {
return new Cocur Slugify Bridge Twig SlugifyExtension ( Cocur Slugify Slugify:: create ());
},
),
拡張機能の登録に関する詳細については、Twig ドキュメントを参照してください。
Mustache.php で Slugify を使用するために追加の統合は必要ありません。 Mustache で Slugify を使用したい場合は、ヘルパーを追加するだけです。
use Cocur Slugify Slugify ;
$ mustache = new Mustache_Engine ([
// ...
" helpers " => [
" slugify " => function ( $ string , $ separator = null ) {
return Slugify:: create ()-> slugify ( $ string , $ separator );
},
],
]);
Slugify は、Laravel (バージョン 4.1 以降) に統合するサービス プロバイダーも提供します。
Laravel プロジェクトのapp/config/app.php
ファイルで、サービスプロバイダーを「providers」配列に追加します。
' providers ' => array (
" CocurSlugifyBridgeLaravelSlugifyServiceProvider " ,
)
そして、ファサードを「aliases」配列に追加します。
' aliases ' => array (
" Slugify " => " CocurSlugifyBridgeLaravelSlugifyFacade " ,
)
その後、コントローラーでSlugify::slugify()
メソッドを使用できます。
$ url = Slugify:: slugify ( " welcome to the homepage " );
Slugify は、Zend Framework 2 アプリケーションで簡単に使用できます。付属のブリッジは、すでに登録されているサービスとビュー ヘルパーを提供します。
このように構成内でモジュールを有効にするだけです。
return [
//...
" modules " => [
" Application " ,
" ZfcBase " ,
" CocurSlugifyBridgeZF2 " , // <- Add this line
//...
],
//...
];
その後、 CocurSlugifySlugify
サービス (またはslugify
エイリアス) を取得し、スラッグを生成できます。
/** @var ZendServiceManagerServiceManager $sm */
$ slugify = $ sm -> get ( " CocurSlugifySlugify " );
$ slug = $ slugify -> slugify ( " Hällo Wörld " );
$ anotherSlug = $ slugify -> slugify ( " Hällo Wörld " , " _ " );
ビュー テンプレートでslugify
ヘルパーを使用してスラッグを生成します。
<?php echo $ this -> slugify ( " Hällo Wörld " ); ?>
<?php echo $ this -> slugify ( " Hällo Wörld " , " _ " ); ?>
サービス (ビュー ヘルパーでも使用されます) は、この構成キーを定義することでカスタマイズできます。
return [
" cocur_slugify " => [
" reg_exp " => " /([^a-zA-Z0-9]|-)+/ " ,
],
];
Slugify には、Nette アプリケーションのサービスとして使用できるようにする Nette 拡張機能が含まれています。 config.neon
に登録するだけです。
# app/config/config.neon
extensions :
slugify : CocurSlugifyBridgeNetteSlugifyExtension
これで、プレゼンターなど、アプリケーション内のあらゆる場所でCocurSlugifySlugifyInterface
サービスを使用できるようになりました。
class MyPresenter extends Nette Application UI Presenter
{
/** @var CocurSlugifySlugifyInterface @inject */
public $ slugify ;
public function renderDefault ()
{
$ this -> template -> hello = $ this -> slugify -> slugify ( " Hällo Wörld " );
}
}
Nette Framework をネイティブの Latte テンプレート エンジンとともに使用する場合は、Nette 拡張機能をセットアップした後、テンプレートで Latte フィルターslugify
使用できます (上記を参照)。
{ $ hello |slugify }
Nette Framework の外部で Latte を使用する場合は、まずエンジンにフィルターを追加する必要があります。
use Cocur Slugify Bridge Latte SlugifyHelper ;
use Cocur Slugify Slugify ;
use Latte ;
$ latte = new Latte Engine ();
$ latte -> addFilter ( " slugify " , [ new SlugifyHelper (Slugify:: create ()), " slugify " ]);
Slugify は、Slim 3 で動作するために特定のブリッジを必要としません。次の構成を追加するだけです。
$ container [ " view " ] = function ( $ c ) {
$ settings = $ c -> get ( " settings " );
$ view = new Slim Views Twig (
$ settings [ " view " ][ " template_path " ],
$ settings [ " view " ][ " twig " ]
);
$ view -> addExtension (
new Slim Views TwigExtension (
$ c -> get ( " router " ),
$ c -> get ( " request " )-> getUri ()
)
);
$ view -> addExtension (
new Cocur Slugify Bridge Twig SlugifyExtension (
Cocur Slugify Slugify:: create ()
)
);
return $ view ;
};
テンプレートでは次のように使用できます。
< a href = " /blog/{{ post . title | slugify }} " >{{ post . title | raw }}</ a ></ h5 >
Slugify は、 league/container
で使用するためのサービス プロバイダーを提供します。
use Cocur Slugify ;
use League Container ;
/* @var ContainerContainerInterface $container */
$ container -> addServiceProvider (
new Slugify Bridge League SlugifyServiceProvider ()
);
/* @var SlugifySlugify $slugify */
$ slugify = $ container -> get ( Slugify SlugifyInterface::class);
必要なオプションを共有することで構成できます。
use Cocur Slugify ;
use League Container ;
/* @var ContainerContainerInterface $container */
$ container -> share ( " config.slugify.options " , [
" lowercase " => false ,
" rulesets " => [ " default " , " german " ],
]);
$ container -> addServiceProvider (
new Slugify Bridge League SlugifyServiceProvider ()
);
/* @var SlugifySlugify $slugify */
$ slugify = $ container -> get ( Slugify SlugifyInterface::class);
ルール プロバイダーを共有することで、使用するルール プロバイダーを構成できます。
use Cocur Slugify ;
use League Container ;
/* @var ContainerContainerInterface $container */
$ container ->share( Slugify RuleProvider RuleProviderInterface::class, function () {
return new Slugify RuleProvider FileRuleProvider ( __DIR__ . ' /../../rules ' );
]);
$ container -> addServiceProvider ( new Slugify Bridge League SlugifyServiceProvider ());
/* @var SlugifySlugify $slugify */
$ slugify = $ container -> get ( Slugify SlugifyInterface::class);
Symfony 6 のサポート。
バージョン 4 には新しい主要な機能は導入されていませんが、Symfony 4 および 5、Twig 3、そして最も重要なことに PHP 7.3 および 7.4 のサポートが追加されています。
PHP 5、Twig 1、Silex のサポートは終了しました。
composer.json
にはマルチバイト拡張機能が必要です (wandersonwhcr による)DefaultRuleProvider
に追加しました (gsouf による)getName()
をCocurSlugifyBridgeTwigSlugifyExtension
に追加 (TomCan による)DefaultRuleProvider
のルールをアルファベット順に並べ替える (by tbmatuka)bindShared
をsingleton
に置き換えます(sunspikesによる)bindShared
をsingleton
に置き換えます(sunspikesによる)新機能やバグ修正はありませんが、Slugify を v1.0 に引き上げる時期が来ています。
protected
に変更する (acelaya による)Ď
の音訳を修正 (by michalskop)Slugify
クラスのキャラクターの編成を改善しましたこのバージョンでは、Symfony2、Silex、Twig へのオプションの統合が導入されています。このライブラリは他のフレームワークでも引き続き使用できます。他の開発者からの統合は存在しますが、古いバージョンの cocur/slugify が使用されているため、これらのブリッジを含めることにしました。これらの小さなブリッジ クラスをライブラリに含めると、メンテナンスがずっと簡単になります。
$separator
パラメータをSlugifyInterface
に追加しますほぼ完全にコードが書き直され、基礎となるライブラリが壊れているため、 iconv
サポートが削除されました。コードはより良く、より高速になりました。マルチェンコ・アレクサンドルに感謝します。
中国語のサポートは、許可を得て jifei/pinyin から適応されています。
Slugify は Cocur のプロジェクトです。 Twitter でお問い合わせいただけます: @cocurco
サポートが必要な場合は、Twitter で質問するか (質問が短い場合に限ります)、Gitter のチャットに参加することができます。
Slugify の開発をサポートしたい場合は、追加の音訳の提供にご協力いただくか、音訳が間違っている場合はお知らせください。 Github 上で直接プルリクエストを送っていただければ幸いです。 Github 上のプロジェクトに貢献したことがない場合は、喜んでお手伝いいたします。 Twitter で質問するか、Gitter に直接参加してください。
1 ユーロか 2 ユーロを送っていただければ、いつでも私 (Florian、オリジナルの開発者兼メンテナー) を支援していただけます。
MIT ライセンス (MIT)
著作権 (c) 2012-2017 フロリアン・エッカーストーファー
本ソフトウェアおよび関連ドキュメント ファイル (以下「ソフトウェア」) のコピーを入手した人には、使用、コピー、変更、マージする権利を含むがこれらに限定されない、制限なくソフトウェアを取り扱う許可が、ここに無償で与えられます。 、以下の条件を条件として、本ソフトウェアのコピーを出版、配布、サブライセンス、および/または販売すること、および本ソフトウェアが提供される人物にそのことを許可すること。
上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは主要部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証も行われません。いかなる場合においても、作者または著作権所有者は、契約行為、不法行為、またはその他の行為であるかどうかにかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じる、いかなる請求、損害、またはその他の責任に対しても責任を負わないものとします。ソフトウェア。