Wandelt einen String in einen Slug um.
Entwickelt von Florian Eckerstorfer in Wien, Europa, mit Hilfe vieler großartiger Mitwirkender.
ae
ersetzt ä
).Sie können Slugify über Composer installieren:
composer require cocur/slugify
Slugify erfordert die Multibyte String-Erweiterung von PHP. Normalerweise können Sie beim Kompilieren von PHP die Konfigurationsoption --enable-mbstring
verwenden. Weitere Informationen finden Sie in der PHP-Dokumentation.
Für Integrationen können weitere Schritte erforderlich sein.
Erzeuge einen Slug:
use Cocur Slugify Slugify ;
$ slugify = new Slugify ();
echo $ slugify -> slugify ( " Hello World! " ); // hello-world
Sie können auch das von Slugify
verwendete Trennzeichen ändern:
echo $ slugify -> slugify ( " Hello World! " , " _ " ); // hello_world
Die Bibliothek enthält auch CocurSlugifySlugifyInterface
. Verwenden Sie diese Schnittstelle immer dann, wenn Sie eine Instanz von Slugify
eingeben müssen.
Um zusätzliche Transliterationsregeln hinzuzufügen, können Sie die Methode addRule()
verwenden.
$ slugify -> addRule ( " i " , " ey " );
echo $ slugify -> slugify ( " Hi " ); // hey
Viele der in Slugify verwendeten Transliterationsregeln sind spezifisch für eine Sprache. Diese Regeln werden daher mithilfe von Regelsätzen kategorisiert. Regeln für die beliebtesten werden standardmäßig in einer bestimmten Reihenfolge aktiviert. Sie können ändern, welche Regelsätze aktiviert werden und in welcher Reihenfolge sie aktiviert werden. Die Reihenfolge ist wichtig, wenn es widersprüchliche Regeln in verschiedenen Sprachen gibt. Beispielsweise wird ä
im Deutschen mit ae
transkribiert, im Türkischen ist die korrekte Transliteration a
. Standardmäßig wird die deutsche Transliteration verwendet, da Deutsch im Internet häufiger verwendet wird. Wenn Sie lieber die türkische Transliteration verwenden möchten, stehen Ihnen mehrere Möglichkeiten zur Verfügung. Sie können es nach dem Erstellen des Konstruktors aktivieren:
$ slugify = new Slugify ();
$ slugify -> slugify ( " ä " ); // -> "ae"
$ slugify -> activateRuleSet ( " turkish " );
$ slugify -> slugify ( " ä " ); // -> "a"
Eine alternative Möglichkeit wäre, die Regelsätze und ihre Reihenfolge an den Konstruktor zu übergeben.
$ slugify = new Slugify ([ " rulesets " => [ " default " , " turkish " ]]);
$ slugify -> slugify ( " ä " ); // -> "a"
Eine Liste der verfügbaren Regelsätze finden Sie unter Ressourcen/Regeln.
Der Konstruktor benötigt ein Optionsarray. Die rulesets
haben Sie oben bereits gesehen. Sie können auch den regulären Ausdruck ändern, der zum Ersetzen von Zeichen durch das Trennzeichen verwendet wird.
$ slugify = new Slugify ([ " regexp " => " /([^A-Za-z0-9]|-)+/ " ]);
(Der im obigen Beispiel verwendete reguläre Ausdruck ist der Standardausdruck.)
Standardmäßig wandelt Slugify den Slug in Kleinbuchstaben um. Wenn Sie die Groß-/Kleinschreibung der Zeichenfolge beibehalten möchten, können Sie die lowercase
auf „false“ setzen.
$ slugify = new Slugify ([ " lowercase " => false ]);
$ slugify -> slugify ( " Hello World " ); // -> "Hello-World"
Die Kleinschreibung erfolgt vor der Verwendung des regulären Ausdrucks. Wenn Sie die Kleinschreibung beibehalten möchten, Ihr regulärer Ausdruck jedoch mit Großbuchstaben übereinstimmen muss, können Sie die Option lowercase_after_regexp
auf true
setzen.
$ slugify = new Slugify ([
" regexp " => " /(?<=[[:^upper:]])(?=[[:upper:]])/ " ,
" lowercase_after_regexp " => false ,
]);
$ slugify -> slugify ( " FooBar " ); // -> "foo-bar"
Standardmäßig verwendet Slugify Bindestriche als Trennzeichen. Wenn Sie ein anderes Standardtrennzeichen verwenden möchten, können Sie die separator
festlegen.
$ slugify = new Slugify ([ " separator " => " _ " ]);
$ slugify -> slugify ( " Hello World " ); // -> "hello_world"
Standardmäßig entfernt Slugify führende und nachfolgende Trennzeichen, bevor der Slug zurückgegeben wird. Wenn Sie nicht möchten, dass der Slug getrimmt wird, können Sie die trim
auf „false“ setzen.
$ slugify = new Slugify ([ " trim " => false ]);
$ slugify -> slugify ( " Hello World " ); // -> "hello-world-"
Sie können jede der oben genannten Optionen im Handumdrehen überschreiben, indem Sie ein Optionsarray als zweites Argument an die Methode slugify()
übergeben. Zum Beispiel:
$ slugify = new Slugify ();
$ slugify -> slugify ( " Hello World " , [ " lowercase " => false ]); // -> "Hello-World"
Sie können das Trennzeichen auch folgendermaßen ändern:
$ slugify = new Slugify ();
$ slugify -> slugify ( " Hello World " , [ " separator " => " _ " ]); // -> "hello_world"
Sie können sogar einen benutzerdefinierten Regelsatz aktivieren, ohne die Standardregeln zu berühren:
$ slugify = new Slugify ();
$ slugify -> slugify ( " für " , [ " ruleset " => " turkish " ]); // -> "fur"
$ slugify -> slugify ( " für " ); // -> "fuer"
Wir freuen uns sehr, wenn Sie Fehler und Irrtümer in der Transliteration melden, insbesondere wenn Sie Muttersprachler der Sprache und der Frage sind. Fragen Sie in den Ausgaben gerne nach weiteren Sprachen. Bitte beachten Sie jedoch, dass der Betreuer dieses Repositorys nicht alle Sprachen beherrscht. Wenn Sie einen Pull Request mit Regeln für eine neue Sprache bereitstellen oder die Regeln für eine vorhandene Sprache erweitern könnten, wäre das großartig.
Um eine neue Sprache hinzuzufügen, müssen Sie:
[language].json
in Resources/rules
CocurSlugifySlugify::$options
hinzufügen. Wenn Sie die Sprache dort hinzufügen, müssen alle vorhandenen Tests noch bestanden werdenphp bin/generate-default.php
austests/SlugifyTest.php
hinzu. Wenn die Sprache im Standardregelsatz enthalten ist, fügen Sie Ihre Testfälle zu defaultRuleProvider()
hinzu, andernfalls zu customRulesProvider()
.PR einreichen. Vielen Dank.
Im Interesse der Förderung einer offenen und einladenden Umgebung verpflichten wir uns als Mitwirkende und Betreuer dazu, die Teilnahme an unserem Projekt und unserer Gemeinschaft für alle zu einem belästigungsfreien Erlebnis zu machen, unabhängig von Alter, Körpergröße, Behinderung, ethnischer Zugehörigkeit, Geschlechtsidentität und Ausdruck. Erfahrungsniveau, Nationalität, persönliches Erscheinungsbild, Rasse, Religion oder sexuelle Identität und Orientierung.
Den vollständigen Verhaltenskodex finden Sie hier.
Dieses Projekt ist kein Ort für Hass. Bei Problemen wenden Sie sich bitte an Florian: [email protected]
Slugify enthält ein Symfony-Bundle und eine Dienstdefinition, die es Ihnen ermöglichen, es als Dienst in Ihrer Symfony-Anwendung zu verwenden. Der Code befindet sich in CocurSlugifyBridgeSymfonyCocurSlugifyBundle
und Sie müssen ihn nur aktivieren:
Die Unterstützung für Symfony 2 wurde in Slugify 4.0.0 eingestellt, verwenden Sie 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 ],
];
Sie können den Dienst cocur_slugify
jetzt überall in Ihrer Anwendung verwenden, beispielsweise in Ihrem Controller:
$ slug = $ this -> get ( " cocur_slugify " )-> slugify ( " Hello World! " );
Das Bundle stellt außerdem einen Alias slugify
für den Dienst cocur_slugify
bereit:
$ slug = $ this -> get ( " slugify " )-> slugify ( " Hello World! " );
Wenn Sie autowire
(Symfony >=3.3) verwenden, können Sie es wie folgt in Ihre Dienste einbinden:
public function __construct( Cocur Slugify SlugifyInterface $ slugify )
Sie können die folgenden Konfigurationseinstellungen in config.yml
(Symfony 2-3) oder config/packages/cocur_slugify.yaml
(Symfony 4) festlegen, um den Slugify-Dienst anzupassen:
cocur_slugify :
lowercase : false # or true
separator : " - " # any string
# regexp:
rulesets : ["austrian"] # List of rulesets: https://github.com/cocur/slugify/tree/master/Resources/rules
Wenn Sie das Symfony-Framework mit Twig verwenden, können Sie den Twig-Filter slugify
in Ihren Vorlagen verwenden, nachdem Sie Symfony-Integrationen eingerichtet haben (siehe oben).
{{ ' Hällo Wörld ' | slugify }}
Wenn Sie Twig außerhalb des Symfony-Frameworks verwenden, müssen Sie zunächst die Erweiterung zu Ihrer Umgebung hinzufügen:
use Cocur Slugify Bridge Twig SlugifyExtension ;
use Cocur Slugify Slugify ;
$ twig = new Twig_Environment ( $ loader );
$ twig -> addExtension ( new SlugifyExtension (Slugify:: create ()));
Um den Twig-Filter mit TwigBridge für Laravel zu verwenden, müssen Sie die Slugify-Erweiterung mithilfe eines Verschlusses hinzufügen:
// laravel/app/config/packages/rcrowe/twigbridge/config.php
' extensions ' => array (
//...
function () {
return new Cocur Slugify Bridge Twig SlugifyExtension ( Cocur Slugify Slugify:: create ());
},
),
Weitere Informationen zur Registrierung von Erweiterungen finden Sie in der Twig-Dokumentation.
Wir benötigen keine zusätzliche Integration, um Slugify in Mustache.php zu verwenden. Wenn Sie Slugify in Moustache verwenden möchten, fügen Sie einfach einen Helfer hinzu:
use Cocur Slugify Slugify ;
$ mustache = new Mustache_Engine ([
// ...
" helpers " => [
" slugify " => function ( $ string , $ separator = null ) {
return Slugify:: create ()-> slugify ( $ string , $ separator );
},
],
]);
Slugify bietet auch einen Dienstanbieter zur Integration in Laravel (Versionen 4.1 und höher).
Fügen Sie in der Datei app/config/app.php
Ihres Laravel-Projekts den Dienstanbieter zum Array „providers“ hinzu:
' providers ' => array (
" CocurSlugifyBridgeLaravelSlugifyServiceProvider " ,
)
Und fügen Sie die Fassade zum Array „aliases“ hinzu:
' aliases ' => array (
" Slugify " => " CocurSlugifyBridgeLaravelSlugifyFacade " ,
)
Anschließend können Sie die Methode Slugify::slugify()
in Ihren Controllern verwenden:
$ url = Slugify:: slugify ( " welcome to the homepage " );
Slugify kann problemlos in Zend Framework 2-Anwendungen verwendet werden. Die im Lieferumfang enthaltene Bridge bietet einen bereits für Sie registrierten Service und einen View-Helper.
Aktivieren Sie einfach das Modul in Ihrer Konfiguration wie folgt.
return [
//...
" modules " => [
" Application " ,
" ZfcBase " ,
" CocurSlugifyBridgeZF2 " , // <- Add this line
//...
],
//...
];
Danach können Sie den CocurSlugifySlugify
Dienst (oder den slugify
Alias) abrufen und einen Slug generieren.
/** @var ZendServiceManagerServiceManager $sm */
$ slugify = $ sm -> get ( " CocurSlugifySlugify " );
$ slug = $ slugify -> slugify ( " Hällo Wörld " );
$ anotherSlug = $ slugify -> slugify ( " Hällo Wörld " , " _ " );
Ihrer Ansicht nach verwenden Vorlagen den slugify
Helfer, um Slugs zu generieren.
echo $ this -> slugify ( " Hällo Wörld " ); ?>
echo $ this -> slugify ( " Hällo Wörld " , " _ " ); ?>
Der Dienst (der auch im View-Helper verwendet wird) kann durch die Definition dieses Konfigurationsschlüssels angepasst werden.
return [
" cocur_slugify " => [
" reg_exp " => " /([^a-zA-Z0-9]|-)+/ " ,
],
];
Slugify enthält eine Nette-Erweiterung, mit der Sie es als Dienst in Ihrer Nette-Anwendung verwenden können. Sie müssen es nur in Ihrer config.neon
registrieren:
# app/config/config.neon
extensions :
slugify : CocurSlugifyBridgeNetteSlugifyExtension
Sie können den CocurSlugifySlugifyInterface
-Dienst jetzt überall in Ihrer Anwendung verwenden, zum Beispiel in Ihrem Presenter:
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 " );
}
}
Wenn Sie das Nette Framework mit seiner nativen Latte-Templating-Engine verwenden, können Sie den Latte-Filter slugify
in Ihren Vorlagen verwenden, nachdem Sie die Nette-Erweiterung eingerichtet haben (siehe oben).
{ $ hello |slugify }
Wenn Sie Latte außerhalb des Nette Frameworks verwenden, müssen Sie zunächst den Filter zu Ihrer Engine hinzufügen:
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 benötigt keine spezielle Bridge, um mit Slim 3 zu funktionieren, fügen Sie einfach die folgende Konfiguration hinzu:
$ 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 ;
};
In einer Vorlage können Sie es so verwenden:
< a href = " /blog/{{ post . title | slugify }} " >{{ post . title | raw }} a > h5 >
Slugify stellt einen Dienstleister für die Nutzung mit league/container
zur Verfügung:
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);
Sie können es konfigurieren, indem Sie die erforderlichen Optionen freigeben:
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);
Sie können konfigurieren, welcher Regelanbieter verwendet werden soll, indem Sie ihn freigeben:
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);
Unterstützung für Symfony 6.
Version 4 führt keine neuen Hauptfunktionen ein, sondern fügt Unterstützung für Symfony 4 und 5, Twig 3 und vor allem PHP 7.3 und 7.4 hinzu.
Die Unterstützung für PHP 5, Twig 1 und Silex wird eingestellt.
composer.json
erforderlich (von wandersonwhcr)DefaultRuleProvider
hinzugefügt (von gsouf)getName()
zu CocurSlugifyBridgeTwigSlugifyExtension
hinzufügen (von TomCan)DefaultRuleProvider
alphabetisch sortieren (von tbmatuka)bindShared
durch singleton
in der Laravel-Brücke (von Sunspikes)bindShared
durch singleton
in der Laravel-Brücke (von Sunspikes)Keine neuen Funktionen oder Bugfixes, aber es ist an der Zeit, Slugify auf Version 1.0 zu bringen.
protected
ändern (von acelaya)Ď
korrigiert (von michalskop)Slugify
KlasseDiese Version führt optionale Integrationen in Symfony2, Silex und Twig ein. Sie können die Bibliothek weiterhin in jedem anderen Framework verwenden. Ich habe mich entschieden, diese Brücken einzubinden, weil es Integrationen von anderen Entwicklern gibt, diese jedoch veraltete Versionen von cocur/slugify verwenden. Die Aufnahme dieser kleinen Bridge-Klassen in die Bibliothek erleichtert mir die Pflege erheblich.
$separator
-Parameter zu SlugifyInterface
hinzufügen Fast vollständig neu geschriebener Code, entfernt iconv
Unterstützung, da die zugrunde liegende Bibliothek defekt ist. Der Code ist jetzt besser und schneller. Vielen Dank an Marchenko Alexandr.
Die Unterstützung für Chinesisch wurde mit Genehmigung von Jifei/Pinyin übernommen.
Slugify ist ein Projekt von Cocur. Sie können uns auf Twitter kontaktieren: @cocurco
Wenn Sie Unterstützung benötigen, können Sie diese auf Twitter stellen (nur, wenn Ihre Frage kurz ist) oder an unserem Chat auf Gitter teilnehmen.
Wenn Sie die Entwicklung von Slugify unterstützen möchten, können Sie uns bei der Bereitstellung zusätzlicher Transliterationen helfen oder uns informieren, wenn eine Transliteration falsch ist. Wir würden uns sehr freuen, wenn Sie uns direkt einen Pull Request auf Github senden könnten. Wenn Sie noch nie an einem Projekt auf Github mitgewirkt haben, helfen wir Ihnen gerne weiter. Fragen Sie einfach auf Twitter oder treten Sie direkt unserem Gitter bei.
Sie können mir (Florian, dem ursprünglichen Entwickler und Betreuer) jederzeit helfen, indem Sie mir ein oder zwei Euro schicken.
Die MIT-Lizenz (MIT)
Copyright (c) 2012-2017 Florian Eckerstorfer
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-INHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, WEDER AUS EINER VERTRAGLICHEN HANDLUNG, AUS unerlaubter Handlung ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ERGEBEN SOFTWARE.