Mengubah string menjadi siput.
Dikembangkan oleh Florian Eckerstorfer di Wina, Eropa dengan bantuan banyak kontributor hebat.
ae
menggantikan ä
).Anda dapat menginstal Slugify melalui Komposer:
composer require cocur/slugify
Slugify memerlukan ekstensi Multibyte String dari PHP. Biasanya Anda dapat menggunakan opsi konfigurasi --enable-mbstring
saat mengkompilasi PHP. Informasi lebih lanjut dapat ditemukan di dokumentasi PHP.
Langkah lebih lanjut mungkin diperlukan untuk integrasi.
Hasilkan siput:
use Cocur Slugify Slugify ;
$ slugify = new Slugify ();
echo $ slugify -> slugify ( " Hello World! " ); // hello-world
Anda juga dapat mengubah pemisah yang digunakan oleh Slugify
:
echo $ slugify -> slugify ( " Hello World! " , " _ " ); // hello_world
Perpustakaan juga berisi CocurSlugifySlugifyInterface
. Gunakan antarmuka ini kapan pun Anda perlu mengetikkan petunjuk contoh Slugify
.
Untuk menambahkan aturan transliterasi tambahan Anda dapat menggunakan metode addRule()
.
$ slugify -> addRule ( " i " , " ey " );
echo $ slugify -> slugify ( " Hi " ); // hey
Banyak aturan transliterasi yang digunakan di Slugify khusus untuk suatu bahasa. Oleh karena itu, aturan-aturan ini dikategorikan menggunakan kumpulan aturan. Aturan untuk yang paling populer diaktifkan secara default dalam urutan tertentu. Anda dapat mengubah rangkaian aturan mana yang diaktifkan dan urutan pengaktifannya. Urutan ini penting ketika ada aturan yang bertentangan dalam berbagai bahasa. Misalnya, dalam bahasa Jerman ä
ditransliterasi dengan ae
, dalam bahasa Turki transliterasi yang benar adalah a
. Secara default, transliterasi bahasa Jerman digunakan karena bahasa Jerman lebih sering digunakan di internet. Jika Anda ingin menggunakan transliterasi Turki, Anda harus memilih kemungkinan. Anda dapat mengaktifkannya setelah membuat konstruktor:
$ slugify = new Slugify ();
$ slugify -> slugify ( " ä " ); // -> "ae"
$ slugify -> activateRuleSet ( " turkish " );
$ slugify -> slugify ( " ä " ); // -> "a"
Cara alternatifnya adalah meneruskan kumpulan aturan dan urutannya ke konstruktor.
$ slugify = new Slugify ([ " rulesets " => [ " default " , " turkish " ]]);
$ slugify -> slugify ( " ä " ); // -> "a"
Anda dapat menemukan daftar kumpulan aturan yang tersedia di Sumber Daya/aturan.
Konstruktor mengambil array opsi, Anda telah melihat opsi rulesets
di atas. Anda juga dapat mengubah ekspresi reguler yang digunakan untuk mengganti karakter dengan pemisah.
$ slugify = new Slugify ([ " regexp " => " /([^A-Za-z0-9]|-)+/ " ]);
(Ekspresi reguler yang digunakan dalam contoh di atas adalah ekspresi default.)
Secara default, Slugify akan mengubah slug menjadi huruf kecil. Jika Anda ingin mempertahankan huruf besar/kecil string, Anda dapat mengatur opsi lowercase
ke false.
$ slugify = new Slugify ([ " lowercase " => false ]);
$ slugify -> slugify ( " Hello World " ); // -> "Hello-World"
Huruf kecil dilakukan sebelum menggunakan ekspresi reguler. Jika Anda ingin mempertahankan perilaku huruf kecil tetapi ekspresi reguler Anda harus cocok dengan huruf besar, Anda dapat mengatur opsi lowercase_after_regexp
ke true
.
$ slugify = new Slugify ([
" regexp " => " /(?<=[[:^upper:]])(?=[[:upper:]])/ " ,
" lowercase_after_regexp " => false ,
]);
$ slugify -> slugify ( " FooBar " ); // -> "foo-bar"
Secara default, Slugify akan menggunakan tanda hubung sebagai pemisah. Jika Anda ingin menggunakan pemisah default yang berbeda, Anda dapat mengatur opsi separator
.
$ slugify = new Slugify ([ " separator " => " _ " ]);
$ slugify -> slugify ( " Hello World " ); // -> "hello_world"
Secara default, Slugify akan menghapus pemisah awal dan akhir sebelum mengembalikan slug. Jika Anda tidak ingin siput dipangkas, Anda dapat mengatur opsi trim
ke false.
$ slugify = new Slugify ([ " trim " => false ]);
$ slugify -> slugify ( " Hello World " ); // -> "hello-world-"
Anda dapat menimpa salah satu opsi di atas dengan cepat dengan meneruskan array opsi sebagai argumen kedua ke metode slugify()
. Misalnya:
$ slugify = new Slugify ();
$ slugify -> slugify ( " Hello World " , [ " lowercase " => false ]); // -> "Hello-World"
Anda juga dapat memodifikasi pemisah dengan cara ini:
$ slugify = new Slugify ();
$ slugify -> slugify ( " Hello World " , [ " separator " => " _ " ]); // -> "hello_world"
Anda bahkan dapat mengaktifkan kumpulan aturan khusus tanpa menyentuh aturan default:
$ slugify = new Slugify ();
$ slugify -> slugify ( " für " , [ " ruleset " => " turkish " ]); // -> "fur"
$ slugify -> slugify ( " für " ); // -> "fuer"
Kami sangat menghargai jika Anda melaporkan bug dan kesalahan dalam transliterasi, terutama jika Anda adalah penutur asli bahasa tersebut dan pertanyaannya. Jangan ragu untuk meminta bahasa tambahan dalam masalah ini, namun perlu diingat bahwa pengelola repositori ini tidak menguasai semua bahasa. Jika Anda dapat memberikan Permintaan Tarik dengan aturan untuk bahasa baru atau memperluas aturan untuk bahasa yang sudah ada, itu akan luar biasa.
Untuk menambahkan bahasa baru, Anda perlu:
[language].json
di Resources/rules
CocurSlugifySlugify::$options
. Jika Anda menambahkan bahasa di sana, semua tes yang ada masih harus lulusphp bin/generate-default.php
tests/SlugifyTest.php
. Jika bahasanya ada dalam kumpulan aturan default, tambahkan kasus pengujian Anda ke defaultRuleProvider()
, jika tidak, ke customRulesProvider()
.Kirim PR. Terima kasih banyak.
Demi menumbuhkan lingkungan yang terbuka dan ramah, kami sebagai kontributor dan pengelola berjanji untuk membuat partisipasi dalam proyek kami dan komunitas kami menjadi pengalaman bebas pelecehan bagi semua orang, tanpa memandang usia, ukuran tubuh, disabilitas, etnis, identitas gender, dan ekspresi. tingkat pengalaman, kebangsaan, penampilan pribadi, ras, agama, atau identitas dan orientasi seksual.
Kode Etik selengkapnya dapat ditemukan di sini.
Proyek ini bukan tempat untuk kebencian. Jika Anda memiliki masalah, silakan hubungi Florian: [email protected]
Slugify berisi bundel Symfony dan definisi layanan yang memungkinkan Anda menggunakannya sebagai layanan di aplikasi Symfony Anda. Kodenya berada di CocurSlugifyBridgeSymfonyCocurSlugifyBundle
dan Anda hanya perlu mengaktifkannya:
Dukungan untuk Symfony 2 telah dihentikan di Slugify 4.0.0, gunakan 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 ],
];
Anda sekarang dapat menggunakan layanan cocur_slugify
di mana saja di aplikasi Anda, misalnya di pengontrol Anda:
$ slug = $ this -> get ( " cocur_slugify " )-> slugify ( " Hello World! " );
Bundel ini juga menyediakan alias slugify
untuk layanan cocur_slugify
:
$ slug = $ this -> get ( " slugify " )-> slugify ( " Hello World! " );
Jika Anda menggunakan autowire
(Symfony >=3.3), Anda dapat memasukkannya ke layanan Anda seperti ini:
public function __construct( Cocur Slugify SlugifyInterface $ slugify )
Anda dapat mengatur pengaturan konfigurasi berikut di config.yml
(Symfony 2-3) atau config/packages/cocur_slugify.yaml
(Symfony 4) untuk menyesuaikan layanan 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
Jika Anda menggunakan kerangka kerja Symfony dengan Twig, Anda dapat menggunakan filter Twig slugify
di templat Anda setelah Anda menyiapkan integrasi Symfony (lihat di atas).
{{ ' Hällo Wörld ' | slugify }}
Jika Anda menggunakan Twig di luar kerangka Symfony, Anda harus menambahkan ekstensi ke lingkungan Anda terlebih dahulu:
use Cocur Slugify Bridge Twig SlugifyExtension ;
use Cocur Slugify Slugify ;
$ twig = new Twig_Environment ( $ loader );
$ twig -> addExtension ( new SlugifyExtension (Slugify:: create ()));
Untuk menggunakan filter Twig dengan TwigBridge untuk Laravel, Anda perlu menambahkan ekstensi Slugify menggunakan penutupan:
// laravel/app/config/packages/rcrowe/twigbridge/config.php
' extensions ' => array (
//...
function () {
return new Cocur Slugify Bridge Twig SlugifyExtension ( Cocur Slugify Slugify:: create ());
},
),
Anda dapat menemukan informasi lebih lanjut tentang mendaftarkan ekstensi di dokumentasi Twig.
Kami tidak memerlukan integrasi tambahan untuk menggunakan Slugify di Moustache.php. Jika Anda ingin menggunakan Slugify di Moustache, cukup tambahkan pembantu:
use Cocur Slugify Slugify ;
$ mustache = new Mustache_Engine ([
// ...
" helpers " => [
" slugify " => function ( $ string , $ separator = null ) {
return Slugify:: create ()-> slugify ( $ string , $ separator );
},
],
]);
Slugify juga menyediakan penyedia layanan untuk diintegrasikan ke Laravel (versi 4.1 dan yang lebih baru).
Di file app/config/app.php
proyek Laravel Anda, tambahkan penyedia layanan ke dalam array "penyedia":
' providers ' => array (
" CocurSlugifyBridgeLaravelSlugifyServiceProvider " ,
)
Dan tambahkan fasad ke dalam array "alias":
' aliases ' => array (
" Slugify " => " CocurSlugifyBridgeLaravelSlugifyFacade " ,
)
Anda kemudian dapat menggunakan metode Slugify::slugify()
di pengontrol Anda:
$ url = Slugify:: slugify ( " welcome to the homepage " );
Slugify dapat dengan mudah digunakan di aplikasi Zend Framework 2. Bridge yang disertakan menyediakan layanan dan view helper yang sudah terdaftar untuk Anda.
Aktifkan saja modul di konfigurasi Anda seperti ini.
return [
//...
" modules " => [
" Application " ,
" ZfcBase " ,
" CocurSlugifyBridgeZF2 " , // <- Add this line
//...
],
//...
];
Setelah itu Anda dapat mengambil layanan CocurSlugifySlugify
(atau alias slugify
) dan menghasilkan slug.
/** @var ZendServiceManagerServiceManager $sm */
$ slugify = $ sm -> get ( " CocurSlugifySlugify " );
$ slug = $ slugify -> slugify ( " Hällo Wörld " );
$ anotherSlug = $ slugify -> slugify ( " Hällo Wörld " , " _ " );
Dalam templat tampilan Anda, gunakan pembantu slugify
untuk menghasilkan slug.
echo $ this -> slugify ( " Hällo Wörld " ); ?>
echo $ this -> slugify ( " Hällo Wörld " , " _ " ); ?>
Layanan (yang juga digunakan dalam view helper) dapat dikustomisasi dengan menentukan kunci konfigurasi ini.
return [
" cocur_slugify " => [
" reg_exp " => " /([^a-zA-Z0-9]|-)+/ " ,
],
];
Slugify berisi ekstensi Nette yang memungkinkan Anda menggunakannya sebagai layanan di aplikasi Nette Anda. Anda hanya perlu mendaftarkannya di config.neon
Anda :
# app/config/config.neon
extensions :
slugify : CocurSlugifyBridgeNetteSlugifyExtension
Anda sekarang dapat menggunakan layanan CocurSlugifySlugifyInterface
di mana saja di aplikasi Anda, misalnya di presenter Anda:
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 " );
}
}
Jika Anda menggunakan Nette Framework dengan mesin templating Latte aslinya, Anda dapat menggunakan filter Latte slugify
di templat Anda setelah Anda menyiapkan ekstensi Nette (lihat di atas).
{ $ hello |slugify }
Jika Anda menggunakan Latte di luar Nette Framework, Anda harus menambahkan filter ke mesin Anda terlebih dahulu:
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 tidak memerlukan jembatan khusus untuk bekerja dengan Slim 3, cukup tambahkan konfigurasi berikut:
$ 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 ;
};
Dalam template Anda dapat menggunakannya seperti ini:
< a href = " /blog/{{ post . title | slugify }} " >{{ post . title | raw }} a > h5 >
Slugify menyediakan penyedia layanan untuk digunakan dengan 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);
Anda dapat mengonfigurasinya dengan membagikan opsi yang diperlukan:
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);
Anda dapat mengonfigurasi penyedia aturan mana yang akan digunakan dengan membagikannya:
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);
Dukungan untuk Symfony 6.
Versi 4 tidak memperkenalkan fitur-fitur utama baru, tetapi menambahkan dukungan untuk Symfony 4 dan 5, Twig 3 dan, yang paling penting, PHP 7.3 dan 7.4.
Dukungan untuk PHP 5, Twig 1 dan Silex dihilangkan.
composer.json
(oleh Wandersonwhcr)DefaultRuleProvider
(oleh gsouf)getName()
yang hilang ke CocurSlugifyBridgeTwigSlugifyExtension
(oleh TomCan)DefaultRuleProvider
berdasarkan abjad (menurut tbmatuka)bindShared
dengan singleton
di jembatan Laravel (dengan sunspikes)bindShared
dengan singleton
di jembatan Laravel (dengan sunspikes)Tidak ada fitur baru atau perbaikan bug, tetapi sudah waktunya untuk meningkatkan Slugify ke v1.0.
protected
(oleh acelaya)Ď
(oleh michalskop)Slugify
Versi ini memperkenalkan integrasi opsional ke Symfony2, Silex dan Twig. Anda masih dapat menggunakan perpustakaan dalam kerangka kerja lainnya. Saya memutuskan untuk memasukkan jembatan ini karena terdapat integrasi dari pengembang lain, tetapi mereka menggunakan versi cocur/slugify yang sudah ketinggalan zaman. Memasukkan kelas jembatan kecil ini ke dalam perpustakaan membuat pemeliharaannya jauh lebih mudah bagi saya.
$separator
yang hilang ke SlugifyInterface
Kode yang hampir sepenuhnya ditulis ulang, menghapus dukungan iconv
karena perpustakaan yang mendasarinya rusak. Kodenya sekarang lebih baik dan lebih cepat. Terima kasih banyak kepada Marchenko Alexandr.
Dukungan untuk bahasa Mandarin diadaptasi dari jifei/Pinyin dengan izin.
Slugify adalah proyek Cocur. Anda dapat menghubungi kami di Twitter: @cocurco
Jika Anda memerlukan dukungan, Anda dapat bertanya di Twitter (hanya jika pertanyaan Anda singkat) atau Anda dapat bergabung dengan obrolan kami di Gitter.
Jika Anda ingin mendukung pengembangan Slugify, Anda dapat membantu kami menyediakan transliterasi tambahan atau memberi tahu kami jika ada transliterasi yang salah. Kami akan sangat menghargai jika Anda dapat mengirimkan Permintaan Tarik langsung kepada kami di Github. Jika Anda belum pernah berkontribusi pada proyek di Github, kami dengan senang hati membantu Anda. Tanya saja di Twitter atau langsung bergabung dengan Gitter kami.
Anda selalu dapat membantu saya (Florian, pengembang dan pengelola asli) dengan mengirimkan saya satu atau dua Euro.
Lisensi MIT (MIT)
Hak Cipta (c) 2012-2017 Florian Eckerstorfer
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk namun tidak terbatas pada hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "APA ADANYA", TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.