Pembuat slug URL

Mengubah judul menjadi slug URL, mentransliterasi aksara Ibrani, Arab, Kiril, dan Yunani, dengan bentuk path Unicode di sisinya dan cek tumbukan untuk daftar.

Slug
creme-brulee-grusse-aus-munchen
Path Unicode — tanpa transliterasi, tak ada yang hilang
crème-brûlée-grüße-aus-münchen
Persen-terkodekan — yang dilihat server
cr%C3%A8me-br%C3%BBl%C3%A9e-gr%C3%BC%C3%9Fe-aus-m%C3%BCnchen

Sebuah browser menampilkan bentuk terbaca di atas dan mengirim yang ini. Keduanya path yang sama.

Apa yang dilakukan alat ini

Tempel sebuah judul dalam aksara apa pun dan ia kembali sebagai slug yang bisa dibawa sebuah URL: huruf kecil, tanpa tanda baca, kata-kata digabung oleh sebuah pemisah yang Anda pilih. Aksen Latin dibuang, dan aksara Ibrani, Arab, Kiril, dan Yunani ditransliterasi ke huruf Latin.

Di samping slug ada judul yang sama yang dipertahankan dalam aksaranya sendiri. Bentuk itu adalah sebuah path yang sah pula, dan untuk aksara yang paling banyak kehilangan dalam transliterasi ia sering jawaban yang lebih baik — jadi keduanya dihasilkan dari satu judul ketimbang alat memilih untuk Anda.

Untuk apa sebuah slug

Sebuah slug adalah bagian sebuah URL yang bisa dibaca manusia: potongan setelah garis miring terakhir yang menamai halaman ketimbang menomorinya. Ia ada karena sebuah path yang terbaca sebagai kata bertahan ditempel ke sebuah pesan, dicetak pada sebuah salindia, atau dibaca lantang melalui telepon, dan sebuah id numerik tak melakukan satu pun darinya.

Itu juga sebabnya bentuknya begitu terbatas. Sebuah slug sebaiknya stabil — mengubahnya merusak setiap tautan yang sudah menunjuk ke halaman — dan ia sebaiknya tak ambigu ketika ditulis dengan tangan, yang menyingkirkan spasi, huruf kapital yang seorang pembaca mungkin atau mungkin tak mereproduksi, dan tanda baca yang berarti sesuatu bagi sebuah shell atau pengurai Markdown.

Bagaimana aksen lepas

Kebanyakan diakritik Latin dibuang oleh platform ketimbang oleh sebuah tabel. Unicode mendefinisikan é sebagai dapat-didekomposisi menjadi sebuah e polos diikuti sebuah aksen akut gabungan, jadi menormalkan ke bentuk terdekomposisi itu lalu membuang setiap tanda gabungan meninggalkan huruf polos di belakang. Operasi yang sama menangani ñ, ç, ő, dan beberapa ratus lagi, dan ia tak bisa ketinggalan zaman, karena ia memakai data Unicode yang sudah dikirim browser.

Ia tak menangani segalanya, dan celahnya layak diketahui. Sebuah huruf yang tandanya adalah sebuah guratan menembus glif ketimbang sebuah tanda di atasnya — ø, ł, đ, ħ, ŧ — adalah sebuah karakter tunggal tak terbagi tanpa dekomposisi sama sekali, jadi membuang tanda meninggalkannya persis seperti adanya. Begitu pula sebuah ligatur: ß, æ, dan œ masing-masing mewakili sebuah urutan bunyi, bukan sebuah huruf plus dekorasi. Semua itu butuh sebuah ejaan eksplisit, dan tanpa satu mereka cukup lenyap dari slug.

Mengapa setelan bahasa mengubah jawaban

Tak ada romanisasi tunggal yang benar dari ü. Jerman telah mengejanya ue sejak sebelum diaeresis ada — kedua titik bermula sebagai sebuah e superskrip kecil — jadi Müller secara benar mueller, dan seorang pembaca Jerman akan menemukan muller salah. Prancis, Spanyol, dan Portugis memperlakukan diakritik mereka sebagai aksen pada sebuah huruf yang selain itu adalah dirinya sendiri, jadi crème brûlée secara benar creme-brulee, dan mengejanya cruemme akan omong kosong.

Bahasa-bahasa Nordik tak sepakat satu sama lain dengan cara yang sama. Denmark dan Norwegia menggandakan vokal, mengikuti ejaan lama yang digantikan huruf itu; Swedia tidak:

  • Jerman — ä menjadi ae, ö menjadi oe, ü menjadi ue, ß menjadi ss. München adalah muenchen.
  • Denmark dan Norwegia — æ menjadi ae, ø menjadi oe, å menjadi aa. Ålborg adalah aalborg.
  • Swedia — ä menjadi a, ö menjadi o, å menjadi a. Ålborg adalah alborg.
  • Umum — setiap tanda dibuang dan huruf dasar dipertahankan. Ålborg adalah alborg, München adalah munchen.

Ini bukan aproksimasi yang bersaing dari satu jawaban; mereka adalah empat jawaban berbeda yang benar untuk empat pertanyaan berbeda. Hanya satu yang bisa menjadi default, jadi setelannya terlihat dan alat mengatakan konvensi mana yang menghasilkan apa yang Anda lihat. Satu huruf sama di mana-mana: ß adalah sebuah ligatur ketimbang sebuah aksen, jadi membuangnya akan menghapus sebuah bunyi, dan ia ss dalam setiap setelan di sini.

Aksara yang butuh sebuah tabel

Tak ada dalam browser yang meromanisasi Kiril, Yunani, Ibrani, atau Arab, jadi masing-masing adalah sebuah tabel yang ditulis dengan tangan terhadap sebuah standar terbitan. Dua darinya keluar baik, karena mereka menulis vokalnya:

  • Kiril mengikuti BGN/PCGN, romanisasi pada peta dan paspor berbahasa-Inggris: ж adalah zh, ч adalah ch, щ adalah shch, х adalah kh. Москва menjadi moskva dan Чехов menjadi chekhov.
  • Yunani mengikuti ELOT 743, termasuk digraf yang didefinisikannya: ου adalah ou ketimbang oy, dan ευ adalah ev. Αθήνα menjadi athina dan Ευρώπη menjadi evropi.

ISO 9 adalah standar Kiril terkenal lainnya dan sengaja tak dipakai di sini. Ia dapat dibalik, yang menjadi intinya, tetapi ia mencapainya dengan diakritik: ж adalah ž. Sebuah slug tak punya ruang untuk sebuah karon, jadi ia akan segera merata ke z — dan Жуков dan Зуков akan menjadi slug yang sama. Digraf BGN bertahan perataan itu.

Satu detail dalam tabel Kiril mudah menjadi salah dan layak dinyatakan. ё dan й tampak seperti huruf dengan sebuah aksen, dan Unicode memang mendekomposisinya begitu, tetapi tandanya adalah yang menjadikannya huruf berbeda ketimbang dekorasi pada yang sama. Membuang tanda sebelum berkonsultasi ke tabel — urutan yang benar untuk setiap aksara lain di sini — diam-diam mengubah Ёлка menjadi elka dan Андрей menjadi andrei.

Ibrani dan Arab, dan apa yang mereka kehilangan

Kedua aksara menulis konsonan dan meninggalkan sebagian besar vokal ke titik yang tak dibawa teks biasa. Itu bukan masalah pengodean yang bisa dipecahkan alat ini dengan tabel yang lebih baik: informasinya tak ada dalam teks. מאמר adalah empat huruf, mem-alef-mem-resh, dan pembacaan maamar datang dari seorang pembaca yang sudah tahu kata itu. Huruf demi huruf ia hanya bisa mamr.

Yang bisa dilakukan dilakukan. Di tempat sebuah huruf merangkap sebagai tanda vokal posisinya dipakai, karena itulah satu-satunya sinyal yang ditinggalkan teks tanpa-titik:

  • ו dan י adalah konsonan di awal sebuah kata dan huruf vokal di dalamnya, yang mengubah שלום menjadi shlom ketimbang shlvm.
  • Sebuah וו atau יי ganda adalah konsonan di kedua tempat — penggandaan itu persis bagaimana Ibrani mengurai kedua pembacaan.
  • ב, כ, dan פ adalah sebuah stop di awal sebuah kata dan sebuah frikatif di dalamnya. Dagesh yang menandai perbedaannya adalah sebuah titik vokal, jadi posisi adalah semua yang tersisa.
  • Sebuah huruf diikuti sebuah geresh adalah bunyi yang alfabet tak punya huruf untuknya: ג׳ adalah j, צ׳ adalah ch, ז׳ adalah zh. Mengabaikannya akan mengubah ג׳אז menjadi kata yang berbeda.
  • Konsonan emfatik Arab runtuh ke padanan polosnya, karena ASCII tak punya tempat untuk titik di bawah yang membedakannya. صابر dan سابر menghasilkan slug yang sama.

Hasilnya terbaca dan dapat dikenali, dan ia bukan sebuah ejaan yang siapa pun akan menyebutnya benar. Alat mengatakannya pada setiap hasil Ibrani atau Arab ketimbang menyajikan sebuah jawaban berkehilangan sebagai yang selesai — dan menunjuk ke bentuk di bawah, yang tak kehilangan apa pun sama sekali.

Path Unicode, yang tak butuh transliterasi

Sebuah path URL tak terbatas pada ASCII. RFC 3987 mendefinisikan IRI — sebuah pengenal yang boleh mengandung karakter Unicode apa pun — dan aturan untuk menaruh satu di kawat adalah mengodekan bita UTF-8 sebagai escape persen. Setiap browser telah melakukan ini selama dua dekade, itulah sebabnya Wikipedia menyajikan judul artikel Ibrani dan Rusia-nya di bawah nama mereka sendiri dan bilah alamat menampilkannya terbaca.

Jadi keluaran kedua di sini adalah judul dengan tanda baca dan spasinya dibersihkan dan tak ada lagi yang disentuh, dan yang ketiga adalah seperti apa itu sebenarnya di kawat. Mereka adalah path yang sama: yang terbaca adalah yang ditampilkan sebuah browser dan yang disalin seseorang, dan yang terkodekan adalah yang dicatat server.

Mana yang dipakai adalah sebuah keputusan nyata ketimbang formalitas. Bentuk Unicode tak kehilangan apa pun, terbaca dengan benar bagi siapa pun yang berbahasa itu, dan adalah yang akan ditampilkan sebuah mesin pencari. Bentuk transliterasi bertahan ditempel ke tempat yang merusak pengodean, pas dalam sistem yang mengasumsikan path ASCII, dan bisa dibaca lantang melalui telepon. Untuk Ibrani dan Arab khususnya bentuk Unicode biasanya jawaban yang lebih baik, persis karena transliterasi tak bisa memulihkan vokalnya.

Tumbukan, dan mengapa mereka tak diselesaikan untuk Anda

Meng-slug membuang tanda baca, jadi judul yang berbeda hanya dalam tanda baca berhenti berbeda sama sekali. "Our guide to CSS" dan "Our guide to CSS!" adalah dua pos dan satu slug. Dalam mode daftar setiap bentrokan seperti itu ditandai dengan baris yang ditumbuknya, karena inilah kegagalan yang disembunyikan sebuah sistem manajemen konten: ia diam-diam menambahkan sebuah sufiks, menerbitkan, dan URL yang Anda harapkan milik pos yang lain.

Sufiks tersedia sebagai sebuah sakelar, menghasilkan gaya WordPress dan Django — our-guide-to-css, our-guide-to-css-2 — untuk kasus saat sebuah daftar dimaksudkan untuk ditempel di suatu tempat apa adanya. Ia mati secara default karena sebuah tumbukan biasanya masalah konten ketimbang penamaan, dan tumbukan tetap ditandai bahkan ketika sakelar menyala, jadi menyalakannya tak menyembunyikan apa pun.

Panjang, dan memotong di tempat yang tepat

Sebuah batas panjang memotong pada sebuah batas pemisah, tak pernah di dalam sebuah kata. Memotong di tengah-kata tak menghasilkan sebuah slug yang lebih pendek melainkan yang berbeda — introduction-to-crypt bukan introduction-to-cryptography yang lebih rapi — dan setengah kata adalah sebuah kata yang berarti sesuatu yang lain. Jika sebuah kata tunggal lebih panjang daripada batasnya tak ada batas untuk memotong, dan ia dikembalikan utuh ketimbang diiris.

Tak ada batas yang benar secara universal. Mesin pencari menampilkan kira-kira enam puluh sampai tujuh puluh karakter pertama sebuah URL, dan sistem lama kadang membatasi sebuah segmen path, tetapi tak ada yang rusak pada sebuah angka tertentu. Membiarkan bidang kosong membiarkan slug sepanjang yang dibutuhkan judul.

Pertanyaan yang sering diajukan

Karakter apa yang aman dalam sebuah slug URL?
Huruf ASCII huruf kecil, digit, dan sebuah pemisah tunggal akan bekerja di mana-mana tanpa perkecualian. Sebuah tanda hubung adalah pemisah konvensional; sebuah garis bawah bekerja identik tetapi lebih sulit dilihat di bawah sebuah tautan yang bergaris bawah. Spasi, huruf kapital, dan tanda baca semuanya secara teknis dapat-dikodekan dan semuanya menyebabkan kesulitan dalam praktik, jadi sebuah slug membuangnya.
Tanda hubung atau garis bawah?
Sebuah tanda hubung, karena dua alasan yang bertahan melampaui mode. Ia adalah yang dipakai setiap platform besar, jadi ia adalah yang diharapkan pembaca dan alat lain, dan ia lenyap di bawah garis bawah yang dibawa kebanyakan tautan, yang tak dilakukan sebuah garis bawah. Pilihan ditawarkan di sini karena sistem yang ada punya konvensi yang ada dan konsistensi di dalam satu situs lebih penting daripada jawaban mana pun.
Mengapa judul Ibrani atau Arab saya kehilangan vokalnya?
Karena mereka tak pernah ditulis. Kedua aksara menandai sebagian besar vokal dengan titik yang teks biasa hilangkan, jadi sebuah pembacaan huruf-demi-huruf adalah semua yang bisa dihasilkan alat mana pun tanpa sebuah mesin vokalisasi menebak kata mana yang dimaksud. Yang ini mentransliterasi apa yang benar-benar ada, mengatakannya pada hasil, dan menawarkan bentuk path Unicode, yang mempertahankan judul persis seperti diketik.
Bisakah sebuah URL mengandung Ibrani, Arab, atau Tionghoa langsung?
Ya. Sebuah path boleh menampung karakter Unicode apa pun; ia persen-terkodekan sebagai UTF-8 di kawat dan ditampilkan terbaca oleh browser. Begitulah Wikipedia menyajikan judul artikel dalam setiap bahasa yang dicakupnya. Alat ini menampilkan baik bentuk terbaca maupun yang terkodekan, karena yang kedua adalah yang muncul dalam log server dan analitik.
Mengapa Müller kadang mueller dan kadang muller?
Karena keduanya benar, dalam bahasa berbeda. Jerman mengeja umlaut — kedua titik bermula sebagai sebuah e superskrip kecil — sementara Prancis dan Spanyol memperlakukan diakritik mereka sebagai tanda pada sebuah huruf yang selain itu adalah dirinya sendiri. Setelan bahasa memilih sebuah konvensi, dan alat memberi tahu Anda yang mana yang diterapkannya.
Mengapa dua judul saya menghasilkan slug yang sama?
Karena meng-slug membuang tanda baca dan besar-kecil huruf, yang sering satu-satunya hal yang memisahkan dua judul. Mode daftar menandai setiap tumbukan dengan baris yang dibentroknya. Anda bisa menyalakan sufiks -2 bergaya-WordPress, tetapi pertanyaan yang mendasari — apakah dua pos benar-benar sebaiknya punya nama yang nyaris sama — layak dijawab dulu.
Apakah ada yang saya ketik dikirim ke server?
Tidak. Setiap transformasi berjalan di browser Anda; tak ada yang diunggah atau dicatat, dan ia bekerja tanpa koneksi jaringan.