Convertit une chaîne en slug.
Développé par Florian Eckerstorfer à Vienne, en Europe avec l'aide de nombreux grands contributeurs.
ae
remplace ä
).Vous pouvez installer Slugify via Composer :
composer require cocur/slugify
Slugify nécessite l'extension Multibyte String de PHP. Généralement, vous pouvez utiliser l'option de configuration --enable-mbstring
lors de la compilation de PHP. Plus d'informations peuvent être trouvées dans la documentation PHP.
Des étapes supplémentaires peuvent être nécessaires pour les intégrations.
Générez un slug :
use Cocur Slugify Slugify ;
$ slugify = new Slugify ();
echo $ slugify -> slugify ( " Hello World! " ); // hello-world
Vous pouvez également changer le séparateur utilisé par Slugify
:
echo $ slugify -> slugify ( " Hello World! " , " _ " ); // hello_world
La bibliothèque contient également CocurSlugifySlugifyInterface
. Utilisez cette interface chaque fois que vous avez besoin de taper une instance de Slugify
.
Pour ajouter des règles de translittération supplémentaires, vous pouvez utiliser la méthode addRule()
.
$ slugify -> addRule ( " i " , " ey " );
echo $ slugify -> slugify ( " Hi " ); // hey
La plupart des règles de translittération utilisées dans Slugify sont spécifiques à une langue. Ces règles sont donc catégorisées à l'aide d'ensembles de règles. Les règles les plus populaires sont activées par défaut dans un ordre précis. Vous pouvez modifier les ensembles de règles qui sont activés et l'ordre dans lequel ils sont activés. L'ordre est important lorsqu'il existe des règles contradictoires dans différentes langues. Par exemple, en allemand, ä
est translittéré avec ae
, en turc, la translittération correcte est a
. Par défaut, la translittération allemande est utilisée puisque l'allemand est plus souvent utilisé sur Internet. Si vous souhaitez utiliser la translittération turque, vous avez plusieurs possibilités. Vous pouvez l'activer après avoir créé le constructeur :
$ slugify = new Slugify ();
$ slugify -> slugify ( " ä " ); // -> "ae"
$ slugify -> activateRuleSet ( " turkish " );
$ slugify -> slugify ( " ä " ); // -> "a"
Une autre manière serait de transmettre les ensembles de règles et leur ordre au constructeur.
$ slugify = new Slugify ([ " rulesets " => [ " default " , " turkish " ]]);
$ slugify -> slugify ( " ä " ); // -> "a"
Vous pouvez trouver une liste des ensembles de règles disponibles dans Ressources/règles.
Le constructeur prend un tableau d'options, vous avez déjà vu les options rulesets
ci-dessus. Vous pouvez également modifier l'expression régulière utilisée pour remplacer les caractères par le séparateur.
$ slugify = new Slugify ([ " regexp " => " /([^A-Za-z0-9]|-)+/ " ]);
(L'expression régulière utilisée dans l'exemple ci-dessus est celle par défaut.)
Par défaut, Slugify convertira le slug en minuscules. Si vous souhaitez conserver la casse de la chaîne, vous pouvez définir l'option lowercase
sur false.
$ slugify = new Slugify ([ " lowercase " => false ]);
$ slugify -> slugify ( " Hello World " ); // -> "Hello-World"
La mise en minuscules est effectuée avant d'utiliser l'expression régulière. Si vous souhaitez conserver le comportement des minuscules mais que votre expression régulière doit correspondre aux lettres majuscules, vous pouvez définir l'option lowercase_after_regexp
sur true
.
$ slugify = new Slugify ([
" regexp " => " /(?<=[[:^upper:]])(?=[[:upper:]])/ " ,
" lowercase_after_regexp " => false ,
]);
$ slugify -> slugify ( " FooBar " ); // -> "foo-bar"
Par défaut, Slugify utilisera des tirets comme séparateurs. Si vous souhaitez utiliser un séparateur par défaut différent, vous pouvez définir l'option separator
.
$ slugify = new Slugify ([ " separator " => " _ " ]);
$ slugify -> slugify ( " Hello World " ); // -> "hello_world"
Par défaut, Slugify supprimera les séparateurs de début et de fin avant de renvoyer le slug. Si vous ne souhaitez pas que le slug soit tronqué, vous pouvez définir l'option trim
sur false.
$ slugify = new Slugify ([ " trim " => false ]);
$ slugify -> slugify ( " Hello World " ); // -> "hello-world-"
Vous pouvez écraser n'importe laquelle des options ci-dessus à la volée en passant un tableau d'options comme deuxième argument à la méthode slugify()
. Par exemple:
$ slugify = new Slugify ();
$ slugify -> slugify ( " Hello World " , [ " lowercase " => false ]); // -> "Hello-World"
Vous pouvez également modifier le séparateur de cette façon :
$ slugify = new Slugify ();
$ slugify -> slugify ( " Hello World " , [ " separator " => " _ " ]); // -> "hello_world"
Vous pouvez même activer un ensemble de règles personnalisées sans toucher aux règles par défaut :
$ slugify = new Slugify ();
$ slugify -> slugify ( " für " , [ " ruleset " => " turkish " ]); // -> "fur"
$ slugify -> slugify ( " für " ); // -> "fuer"
Nous apprécions vraiment que vous signaliez des bugs et des erreurs dans la translittération, surtout si vous êtes un locuteur natif de la langue et de la question. N'hésitez pas à demander des langues supplémentaires dans les numéros, mais veuillez noter que le responsable de ce référentiel ne parle pas toutes les langues. Si vous pouvez fournir une Pull Request avec des règles pour une nouvelle langue ou étendre les règles pour une langue existante, ce serait incroyable.
Pour ajouter une nouvelle langue, vous devez :
[language].json
dans Resources/rules
CocurSlugifySlugify::$options
. Si vous ajoutez la langue ici, tous les tests existants doivent encore réussirphp bin/generate-default.php
tests/SlugifyTest.php
. Si la langue est dans l'ensemble de règles par défaut, ajoutez vos cas de test à defaultRuleProvider()
, sinon à customRulesProvider()
.Soumettre PR. Merci beaucoup.
Dans l'intérêt de favoriser un environnement ouvert et accueillant, nous, en tant que contributeurs et responsables, nous engageons à faire de la participation à notre projet et à notre communauté une expérience sans harcèlement pour tous, quels que soient l'âge, la taille, le handicap, l'origine ethnique, l'identité et l'expression de genre. niveau d’expérience, nationalité, apparence personnelle, race, religion ou identité et orientation sexuelles.
Le code de conduite complet peut être consulté ici.
Ce projet n’est pas un lieu pour la haine. Si vous rencontrez des problèmes, veuillez contacter Florian : [email protected]
Slugify contient un bundle Symfony et une définition de service qui vous permettent de l'utiliser comme service dans votre application Symfony. Le code réside dans CocurSlugifyBridgeSymfonyCocurSlugifyBundle
et il vous suffit de l'activer :
La prise en charge de Symfony 2 a été abandonnée dans Slugify 4.0.0, utilisez 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 ],
];
Vous pouvez désormais utiliser le service cocur_slugify
partout dans votre application, par exemple dans votre contrôleur :
$ slug = $ this -> get ( " cocur_slugify " )-> slugify ( " Hello World! " );
Le bundle fournit également un alias slugify
pour le service cocur_slugify
:
$ slug = $ this -> get ( " slugify " )-> slugify ( " Hello World! " );
Si vous utilisez autowire
(Symfony >=3.3), vous pouvez l'injecter dans vos services comme ceci :
public function __construct( Cocur Slugify SlugifyInterface $ slugify )
Vous pouvez définir les paramètres de configuration suivants dans config.yml
(Symfony 2-3) ou config/packages/cocur_slugify.yaml
(Symfony 4) pour ajuster le service slugify :
cocur_slugify :
lowercase : false # or true
separator : " - " # any string
# regexp:
rulesets : ["austrian"] # List of rulesets: https://github.com/cocur/slugify/tree/master/Resources/rules
Si vous utilisez le framework Symfony avec Twig, vous pouvez utiliser le filtre Twig slugify
dans vos modèles après avoir configuré les intégrations Symfony (voir ci-dessus).
{{ ' Hällo Wörld ' | slugify }}
Si vous utilisez Twig en dehors du framework Symfony vous devez d'abord ajouter l'extension à votre environnement :
use Cocur Slugify Bridge Twig SlugifyExtension ;
use Cocur Slugify Slugify ;
$ twig = new Twig_Environment ( $ loader );
$ twig -> addExtension ( new SlugifyExtension (Slugify:: create ()));
Pour utiliser le filtre Twig avec TwigBridge pour Laravel, vous devrez ajouter l'extension Slugify à l'aide d'une fermeture :
// laravel/app/config/packages/rcrowe/twigbridge/config.php
' extensions ' => array (
//...
function () {
return new Cocur Slugify Bridge Twig SlugifyExtension ( Cocur Slugify Slugify:: create ());
},
),
Vous pouvez trouver plus d'informations sur l'enregistrement des extensions dans la documentation Twig.
Nous n'avons pas besoin d'une intégration supplémentaire pour utiliser Slugify dans Moustache.php. Si vous souhaitez utiliser Slugify dans Moustache, ajoutez simplement un assistant :
use Cocur Slugify Slugify ;
$ mustache = new Mustache_Engine ([
// ...
" helpers " => [
" slugify " => function ( $ string , $ separator = null ) {
return Slugify:: create ()-> slugify ( $ string , $ separator );
},
],
]);
Slugify fournit également un fournisseur de services à intégrer dans Laravel (versions 4.1 et ultérieures).
Dans le fichier app/config/app.php
de votre projet Laravel, ajoutez le fournisseur de services dans le tableau "providers":
' providers ' => array (
" CocurSlugifyBridgeLaravelSlugifyServiceProvider " ,
)
Et ajoutez la façade dans le tableau "alias":
' aliases ' => array (
" Slugify " => " CocurSlugifyBridgeLaravelSlugifyFacade " ,
)
Vous pouvez ensuite utiliser la méthode Slugify::slugify()
dans vos contrôleurs :
$ url = Slugify:: slugify ( " welcome to the homepage " );
Slugify peut être facilement utilisé dans les applications Zend Framework 2. Le pont inclus fournit un service et un assistant de visualisation déjà enregistrés pour vous.
Activez simplement le module dans votre configuration comme ceci.
return [
//...
" modules " => [
" Application " ,
" ZfcBase " ,
" CocurSlugifyBridgeZF2 " , // <- Add this line
//...
],
//...
];
Après cela, vous pouvez récupérer le service CocurSlugifySlugify
(ou l'alias slugify
) et générer un slug.
/** @var ZendServiceManagerServiceManager $sm */
$ slugify = $ sm -> get ( " CocurSlugifySlugify " );
$ slug = $ slugify -> slugify ( " Hällo Wörld " );
$ anotherSlug = $ slugify -> slugify ( " Hällo Wörld " , " _ " );
Dans vos modèles de vue, utilisez l'assistant slugify
pour générer des slugs.
echo $ this -> slugify ( " Hällo Wörld " ); ?>
echo $ this -> slugify ( " Hällo Wörld " , " _ " ); ?>
Le service (qui est également utilisé dans l'assistant de vue) peut être personnalisé en définissant cette clé de configuration.
return [
" cocur_slugify " => [
" reg_exp " => " /([^a-zA-Z0-9]|-)+/ " ,
],
];
Slugify contient une extension Nette qui vous permet de l'utiliser comme service dans votre application Nette. Il vous suffit de l'enregistrer dans votre config.neon
:
# app/config/config.neon
extensions :
slugify : CocurSlugifyBridgeNetteSlugifyExtension
Vous pouvez désormais utiliser le service CocurSlugifySlugifyInterface
partout dans votre application, par exemple dans votre présentateur :
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 " );
}
}
Si vous utilisez Nette Framework avec son moteur de création de modèles Latte natif, vous pouvez utiliser le filtre Latte slugify
dans vos modèles après avoir configuré l'extension Nette (voir ci-dessus).
{ $ hello |slugify }
Si vous utilisez Latte en dehors de Nette Framework, vous devez d'abord ajouter le filtre à votre moteur :
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 n'a pas besoin de pont spécifique pour fonctionner avec Slim 3, ajoutez simplement la configuration suivante :
$ 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 ;
};
Dans un modèle, vous pouvez l'utiliser comme ceci :
< a href = " /blog/{{ post . title | slugify }} " >{{ post . title | raw }} a > h5 >
Slugify fournit un fournisseur de services à utiliser avec 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);
Vous pouvez le configurer en partageant les options requises :
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);
Vous pouvez configurer le fournisseur de règles à utiliser en le partageant :
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);
Prise en charge de Symfony 6.
La version 4 n'introduit pas de nouvelles fonctionnalités majeures, mais ajoute le support de Symfony 4 et 5, Twig 3 et, surtout, PHP 7.3 et 7.4.
Le support de PHP 5, Twig 1 et Silex est abandonné.
composer.json
(par Wandersonwhcr)DefaultRuleProvider
(par gsouf)getName()
manquant à CocurSlugifyBridgeTwigSlugifyExtension
(par TomCan)DefaultRuleProvider
par ordre alphabétique (par tbmatuka)bindShared
par singleton
dans le pont Laravel (par sunspikes)bindShared
par singleton
dans le pont Laravel (par sunspikes)Pas de nouvelles fonctionnalités ni de corrections de bugs, mais il est temps de passer de Slugify à la v1.0.
protected
(par acelaya)Ď
(par michalskop)Slugify
Cette version introduit des intégrations optionnelles dans Symfony2, Silex et Twig. Vous pouvez toujours utiliser la bibliothèque dans n'importe quel autre framework. J'ai décidé d'inclure ces ponts car il existe des intégrations d'autres développeurs, mais ils utilisent des versions obsolètes de cocur/slugify. L'inclusion de ces petites classes de transition dans la bibliothèque facilite grandement leur maintenance.
$separator
manquant à SlugifyInterface
Code presque complètement réécrit, supprime la prise en charge iconv
car la bibliothèque sous-jacente est cassée. Le code est désormais meilleur et plus rapide. Un grand merci à Marchenko Alexandr.
La prise en charge du chinois est adaptée de jifei/Pinyin avec autorisation.
Slugify est un projet de Cocur. Vous pouvez nous contacter sur Twitter : @cocurco
Si vous avez besoin d'aide, vous pouvez la demander sur Twitter (enfin, seulement si votre question est courte) ou vous pouvez rejoindre notre discussion sur Gitter.
Si vous souhaitez soutenir le développement de Slugify, vous pouvez nous aider à fournir des translittérations supplémentaires ou nous informer si une translittération est erronée. Nous apprécierions grandement que vous puissiez nous envoyer directement une Pull Request sur Github. Si vous n'avez jamais contribué à un projet sur Github, nous serons heureux de vous aider. Demandez simplement sur Twitter ou rejoignez directement notre Gitter.
Vous pouvez toujours m'aider (Florian, le développeur et mainteneur d'origine) en m'envoyant un euro ou deux.
La licence MIT (MIT)
Copyright (c) 2012-2017 Florian Eckerstorfer
L'autorisation est accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion. , publier, distribuer, accorder des sous-licences et/ou vendre des copies du Logiciel, et permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.
LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.