Преобразует строку в фрагмент.
Разработано Флорианом Эккерсторфером в Вене, Европа, с помощью многих выдающихся авторов.
ae
заменяет ä
).Вы можете установить Slugify через Composer:
composer require cocur/slugify
Slugify требует расширения Multibyte String от PHP. Обычно вы можете использовать параметр конфигурации --enable-mbstring
при компиляции PHP. Более подробную информацию можно найти в документации 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()
. Например:
$ 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"
Мы будем очень признательны, если вы сообщите об ошибках и ошибках в транслитерации, особенно если вы являетесь носителем языка и вопроса. Не стесняйтесь запрашивать дополнительные языки в вопросах, но обратите внимание, что сопровождающий этого репозитория не говорит на всех языках. Если бы вы могли предоставить запрос на включение с правилами для нового языка или расширить правила для существующего языка, это было бы здорово.
Чтобы добавить новый язык, вам необходимо:
[language].json
в Resources/rules
CocurSlugifySlugify::$options
. Если вы добавите туда язык, все существующие тесты все равно должны будут пройти.php bin/generate-default.php
tests/SlugifyTest.php
. Если язык находится в наборе правил по умолчанию, добавьте тестовые примеры в defaultRuleProvider()
, в противном случае — в customRulesProvider()
.Отправить пиар. Большое спасибо.
В интересах создания открытой и гостеприимной среды мы, как участники и сопровождающие, обязуемся сделать участие в нашем проекте и нашем сообществе свободным от притеснений опытом для всех, независимо от возраста, размера тела, инвалидности, этнической принадлежности, гендерной идентичности и самовыражения. уровень опыта, национальности, внешности, расы, религии или сексуальной идентичности и ориентации.
Полный текст Кодекса поведения можно найти здесь.
В этом проекте нет места ненависти. Если у вас возникли проблемы, свяжитесь с Флорианом: [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! " );
Пакет также предоставляет псевдоним slugify
для сервиса cocur_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:
rulesets : ["austrian"] # List of rulesets: https://github.com/cocur/slugify/tree/master/Resources/rules
Если вы используете фреймворк Symfony с Twig, вы можете использовать фильтр Twig slugify
в своих шаблонах после настройки интеграции Symfony (см. выше).
{{ ' Hällo Wörld ' | slugify }}
Если вы используете Twig вне платформы Symfony, вам сначала необходимо добавить расширение в вашу среду:
use Cocur Slugify Bridge Twig SlugifyExtension ;
use Cocur Slugify Slugify ;
$ twig = new Twig_Environment ( $ loader );
$ twig -> addExtension ( new SlugifyExtension (Slugify:: create ()));
Чтобы использовать фильтр Twig с TwigBridge для Laravel, вам нужно добавить расширение Slugify, используя замыкание:
// laravel/app/config/packages/rcrowe/twigbridge/config.php
' extensions ' => array (
//...
function () {
return new Cocur Slugify Bridge Twig SlugifyExtension ( Cocur Slugify Slugify:: create ());
},
),
Более подробную информацию о регистрации расширений можно найти в документации Twig.
Нам не нужна дополнительная интеграция для использования Slugify в Mustache.php. Если вы хотите использовать Slugify в Mustache, просто добавьте помощника:
use Cocur Slugify Slugify ;
$ mustache = new Mustache_Engine ([
// ...
" helpers " => [
" slugify " => function ( $ string , $ separator = null ) {
return Slugify:: create ()-> slugify ( $ string , $ separator );
},
],
]);
Slugify также предоставляет поставщика услуг для интеграции с Laravel (версии 4.1 и новее).
В файле app/config/app.php
вашего проекта Laravel добавьте поставщика услуг в массив «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
для создания слизней.
echo $ this -> slugify ( " Hällo Wörld " ); ?>
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, вы можете использовать slugify
фильтра Latte в своих шаблонах после настройки расширения Nette (см. выше).
{ $ hello |slugify }
Если вы используете Latte вне Nette Framework, вам сначала необходимо добавить фильтр в свой движок:
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
(автор Wondersonwhcr)DefaultRuleProvider
добавлены отсутствующие французские правила (от gsouf).getName()
в CocurSlugifyBridgeTwigSlugifyExtension
(от TomCan)DefaultRuleProvider
по алфавиту (автор tbmatuka)bindShared
на singleton
в мосту Laravel (автор sunspikes).bindShared
на singleton
в мосту Laravel (автор sunspikes).Никаких новых функций или исправлений ошибок, но пришло время прокачать Slugify до версии 1.0.
protected
(по acelaya)Ď
(от mihalskop).Slugify
.В этой версии представлены дополнительные возможности интеграции с Symfony2, Silex и Twig. Вы по-прежнему можете использовать библиотеку в любом другом фреймворке. Я решил включить эти мосты, потому что существуют интеграции от других разработчиков, но они используют устаревшие версии cocur/slugify. Включение этих небольших классов-мостиков в библиотеку значительно облегчает мне их поддержку.
$separator
в SlugifyInterface
Почти полностью переписан код, удалена поддержка iconv
, поскольку базовая библиотека не работает. Код теперь стал лучше и быстрее. Огромное спасибо Марченко Александру.
Поддержка китайского языка адаптирована из jifei/pinyin с разрешения.
Slugify — проект Cocur. Вы можете связаться с нами в Твиттере: @cocurco
Если вам нужна поддержка, вы можете задать ее в Твиттере (ну, только если ваш вопрос короткий) или присоединиться к нашему чату на Gitter.
Если вы хотите поддержать разработку Slugify, вы можете помочь нам с предоставлением дополнительных транслитераций или сообщить нам, если транслитерация неверна. Мы будем очень признательны, если вы отправите нам запрос на включение напрямую на Github. Если вы никогда не участвовали в проекте на Github, мы будем рады вам помочь. Просто спросите в Твиттере или напрямую присоединяйтесь к нашему Gitter.
Вы всегда можете помочь мне (Флориану, первоначальному разработчику и сопровождающему), отправив мне пару евро.
Лицензия MIT (MIT)
Copyright (c) 2012-2017 Флориан Экерсторфер
Настоящим бесплатно любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), предоставляется разрешение на работу с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставлено Программное обеспечение, делать это при соблюдении следующих условий:
Вышеупомянутое уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ОТ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.