문자열을 슬러그로 변환합니다.
많은 훌륭한 기여자들의 도움을 받아 유럽 비엔나의 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()
메서드의 두 번째 인수로 전달하여 위의 옵션을 즉시 덮어쓸 수 있습니다. 예를 들어:
$ 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"
음역의 버그와 오류를 보고해 주시면 정말 감사하겠습니다. 특히 해당 언어와 질문의 원어민인 경우 더욱 그렇습니다. 이슈에 추가 언어를 자유롭게 요청하세요. 하지만 이 저장소의 관리자가 모든 언어를 구사할 수는 없다는 점에 유의하세요. 새로운 언어에 대한 규칙이 포함된 Pull Request를 제공하거나 기존 언어에 대한 규칙을 확장할 수 있다면 정말 좋을 것입니다.
새 언어를 추가하려면 다음을 수행해야 합니다.
Resources/rules
에 [language].json
을 만듭니다.CocurSlugifySlugify::$options
에 언어를 추가할 수 있습니다. 거기에 언어를 추가하더라도 기존의 모든 테스트를 통과해야 합니다.php bin/generate-default.php
실행tests/SlugifyTest.php
에 언어에 대한 테스트를 추가하세요. 언어가 기본 규칙 세트에 있으면 테스트 사례를 defaultRuleProvider()
에 추가하고, 그렇지 않으면 customRulesProvider()
에 추가하세요.PR을 제출하세요. 매우 감사합니다.
개방적이고 환영받는 환경을 조성하기 위해 기여자이자 유지관리자로서 우리는 나이, 신체 크기, 장애, 민족, 성 정체성 및 표현에 관계없이 모든 사람이 프로젝트와 커뮤니티에 참여하는 것이 괴롭힘 없는 경험이 되도록 만들 것을 약속합니다. 경험 수준, 국적, 외모, 인종, 종교 또는 성적 정체성 및 지향.
행동강령 전문은 여기에서 확인하실 수 있습니다.
이 프로젝트는 증오를 위한 곳이 아닙니다. 문제가 있는 경우 Florian에게 문의하십시오: [email protected]
Slugify에는 Symfony 애플리케이션에서 서비스로 사용할 수 있는 Symfony 번들 및 서비스 정의가 포함되어 있습니다. 코드는 CocurSlugifyBridgeSymfonyCocurSlugifyBundle
에 있으며 활성화하기만 하면 됩니다.
Slugify 4.0.0에서는 Symfony 2에 대한 지원이 중단되었습니다. 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:
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
도우미를 사용하여 슬러그를 생성하세요.
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 " );
}
}
기본 Latte 템플릿 엔진과 함께 Nette Framework를 사용하는 경우 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);
심포니 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
의 규칙을 알파벳순으로 정렬(tbmatuka 작성)bindShared
singleton
으로 교체(sunspikes 사용)bindShared
singleton
으로 교체(sunspikes 사용)새로운 기능이나 버그 수정은 없지만 이제 Slugify를 v1.0으로 업그레이드할 시간입니다.
protected
됨으로 변경(acelaya 사용)Ď
의 음역 수정(michalskop 작성)Slugify
클래스의 캐릭터 구성 개선이 버전에는 Symfony2, Silex 및 Twig에 대한 선택적 통합이 도입되었습니다. 다른 프레임워크에서는 계속해서 라이브러리를 사용할 수 있습니다. 다른 개발자의 통합이 있기 때문에 이러한 브리지를 포함하기로 결정했지만 그들은 오래된 버전의 cocur/slugify를 사용합니다. 이러한 작은 브리지 클래스를 라이브러리에 포함하면 유지 관리가 훨씬 쉬워집니다.
SlugifyInterface
에 누락된 $separator
매개변수 추가 거의 완전히 재작성된 코드로, 기본 라이브러리가 손상되었기 때문에 iconv
지원을 제거합니다. 이제 코드가 더 좋아지고 빨라졌습니다. Marchenko Alexandr에게 많은 감사를 드립니다.
중국어 지원은 허가를 받아 jifei/Pinyin에서 채택되었습니다.
Slugify는 Cocur의 프로젝트입니다. 트위터 @cocurco 로 문의하실 수 있습니다.
지원이 필요하면 Twitter에 문의하거나(질문이 짧은 경우에만) Gitter 채팅에 참여할 수 있습니다.
Slugify 개발을 지원하려는 경우 추가 음역 제공을 도와주거나 음역이 잘못된 경우 알려주시기 바랍니다. Github에서 직접 Pull Request를 보내주시면 감사하겠습니다. Github의 프로젝트에 기여한 적이 없다면 기꺼이 도와드리겠습니다. Twitter에 문의하거나 Gitter에 직접 가입하세요.
당신은 항상 나에게 한두 유로를 보내서 나(원래 개발자이자 유지관리자인 Florian)를 도와줄 수 있습니다.
MIT 라이센스(MIT)
저작권 (c) 2012-2017 Florian Eckerstorfer
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 다음 조건에 따라 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람이 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.