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

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

Apa yang dilakukan alat ini

Tempel judul dalam aksara apa pun dan ia kembali sebagai slug yang bisa dibawa URL: huruf kecil, tanpa tanda baca, kata-kata digabung oleh 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 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 slug

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

Itu juga sebabnya bentuknya begitu terbatas. 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 mungkin direproduksi seorang pembaca dan mungkin juga tidak, dan tanda baca yang berarti sesuatu bagi shell atau pengurai Markdown.

Bagaimana aksen lepas

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

Ia tak menangani segalanya, dan celahnya layak diketahui. Huruf yang tandanya adalah guratan menembus glif ketimbang tanda di atasnya — ø, ł, đ, ħ, ŧ — adalah karakter tunggal tak terbagi tanpa dekomposisi sama sekali, jadi membuang tanda meninggalkannya persis seperti adanya. Begitu pula ligatur: ß, æ, dan œ masing-masing mewakili urutan bunyi, bukan huruf plus dekorasi. Semua itu butuh ejaan eksplisit, dan tanpanya mereka akan begitu saja 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 e superskrip kecil — jadi Müller sepatutnya ditulis mueller, dan seorang pembaca Jerman akan menganggap muller salah. Prancis, Spanyol, dan Portugis memperlakukan diakritik mereka sebagai aksen pada huruf yang selain itu adalah dirinya sendiri, jadi crème brûlée sepatutnya ditulis creme-brulee, dan mengejanya cruemme akan jadi 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 ini mengatakan konvensi mana yang menghasilkan apa yang Anda lihat. Satu huruf sama di mana-mana: ß adalah ligatur ketimbang aksen, jadi membuangnya akan menghapus bunyi, dan ia ss dalam setiap setelan di sini.

Aksara yang butuh tabel

Tak ada dalam peramban yang meromanisasi Kiril, Yunani, Ibrani, atau Arab, jadi masing-masing adalah tabel yang ditulis dengan tangan berdasarkan 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 ž. Slug tak punya ruang untuk karon, jadi ia akan langsung diratakan menjadi z — dan Жуков dan Зуков akan menjadi slug yang sama. Digraf BGN selamat dari perataan itu.

Satu detail dalam tabel Kiril mudah menjadi salah dan layak dinyatakan. ё dan й tampak seperti huruf dengan aksen, dan Unicode memang mendekomposisinya begitu, tetapi tandanya adalah yang menjadikannya huruf berbeda ketimbang dekorasi pada yang sama. Membuang tanda sebelum tabelnya dibaca — 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 huruf merangkap sebagai tanda vokal posisinya dipakai, karena itulah satu-satunya sinyal yang ditinggalkan teks tanpa-titik:

  • ו dan י adalah konsonan di awal kata dan huruf vokal di dalamnya, yang mengubah שלום menjadi shlom ketimbang shlvm.
  • Sebuah וו atau יי ganda adalah konsonan di kedua tempat — penggandaan itulah persisnya cara Ibrani membedakan kedua pembacaan.
  • ב‎, כ, dan פ adalah stop di awal kata dan frikatif di dalamnya. Dagesh yang menandai perbedaannya adalah titik vokal, jadi yang tersisa hanyalah posisi.
  • Huruf diikuti 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 ejaan yang siapa pun akan menyebutnya benar. Alat ini mengatakannya pada setiap hasil Ibrani atau Arab ketimbang menyajikan jawaban berkehilangan sebagai yang selesai — dan menunjuk ke bentuk di bawah, yang tak kehilangan apa pun sama sekali.

Path Unicode, yang tak butuh transliterasi

Path URL tak terbatas pada ASCII. RFC 3987 mendefinisikan IRI — pengenal yang boleh mengandung karakter Unicode apa pun — dan aturan untuk mengirimkannya melalui jaringan adalah mengodekan bita UTF-8-nya sebagai escape persen. Setiap peramban 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 ketika dikirim. Mereka adalah path yang sama: yang terbaca adalah yang ditampilkan peramban dan yang disalin seseorang, dan yang terkodekan adalah yang dicatat server.

Mana yang dipakai adalah keputusan nyata ketimbang formalitas. Bentuk Unicode tak kehilangan apa pun, terbaca dengan benar bagi siapa pun yang berbahasa itu, dan adalah yang akan ditampilkan 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.

Judul Arab, dibawa sampai ujung

Semua itu bertemu dalam satu judul biasa, jadi inilah satu yang dibawa dari awal sampai akhir. تعلم البرمجة berarti belajar memprogram — dua kata, tanpa tanda baca dan tanpa tanda vokal, dan begitulah bahasa Arab ditulis di mana pun di luar buku pelajaran, kamus, dan kitab suci.

Tiga bentuk kembali. Slug-nya tlm-albrmjh; path Unicode-nya تعلم-البرمجة, yaitu judul itu sendiri dengan pemisah menggantikan spasi; dan di jaringan path yang sama itu adalah %D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9, dua kata yang sama sebagai bita UTF-8. Hanya yang pertama dari ketiganya kehilangan sesuatu, dan ia kehilangan pada masing-masing kata:

  • تعلم dibaca taallum. Empat huruf masuk dan tiga keluar: ع tak punya huruf dalam alfabet Latin, jadi ia dijatuhkan alih-alih ditulis dengan tanda yang dikarang, dan vokal pendek yang didengar pembaca memang tak pernah ditulis.
  • البرمجة dibaca al-barmaja. Kata sandang ال datang sebagai al, dan ta marbuta ة yang menutup kata ditulis h, mengikuti huruf yang bentuknya ia pinjam, bukan a yang terdengar: vokal justru itulah yang ditinggalkan aksara ini.
  • Baca tlm-albrmjh kembali dan tak ada apa pun di dalamnya yang mengatakan vokal mana yang berdiri di antara konsonan. taallum adalah apa kata itu, tlm adalah apa huruf-hurufnya, dan hanya orang yang sudah tahu kata itu yang bisa menyeberang dari satu ke yang lain.

Kehilangan itu tak berhenti pada pembacaan. عمر, nama Omar, kembali sebagai mr — dan مر juga, kata yang sama sekali lain, karena ع yang membedakan keduanya sudah hilang. Dua judul yang berbeda karena itu bisa mendarat pada satu slug, yang ditandai mode daftar sebagai bentrokan alih-alih dinomori diam-diam; bentuk path Unicode masing-masing menjaga keduanya tetap terpisah, karena ia menjaga segalanya.

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 sistem manajemen konten: ia diam-diam menambahkan sufiks, menerbitkan, dan URL yang Anda harapkan milik pos yang lain.

Sufiks tersedia sebagai sakelar, menghasilkan gaya WordPress dan Django — our-guide-to-css, our-guide-to-css-2 — untuk kasus saat daftar dimaksudkan untuk ditempel di suatu tempat apa adanya. Ia mati secara default karena 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

Batas panjang memotong pada batas pemisah, tak pernah di dalam kata. Memotong di tengah-kata tak menghasilkan slug yang lebih pendek melainkan yang berbeda — introduction-to-crypt bukan introduction-to-cryptography yang lebih rapi — dan setengah kata adalah kata yang berarti sesuatu yang lain. Jika kata tunggal lebih panjang daripada batasnya tak ada batas pemisah 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 URL, dan sistem lama kadang membatasi segmen path, tetapi tak ada yang rusak pada angka tertentu. Membiarkan bidang kosong membiarkan slug sepanjang yang dibutuhkan judul.

Pertanyaan yang sering diajukan

Karakter apa yang aman dalam slug URL?
Huruf kecil ASCII, digit, dan pemisah tunggal akan bekerja di mana-mana tanpa perkecualian. Tanda hubung adalah pemisah konvensional; garis bawah bekerja identik tetapi lebih sulit dilihat di bawah tautan yang bergaris bawah. Spasi, huruf kapital, dan tanda baca semuanya secara teknis dapat-dikodekan dan semuanya menyebabkan kesulitan dalam praktik, jadi slug membuangnya.
Tanda hubung atau garis bawah?
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, sementara tanda garis bawah tidak. 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 pembacaan huruf-demi-huruf adalah semua yang bisa dihasilkan alat mana pun tanpa 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.
Mengapa judul Arab saya kehilangan huruf utuh, bukan hanya vokal?
Karena dua konsonan Arab tak punya huruf Latin untuk menjadi. ع dan ء adalah bunyi yang tak ditulis bahasa Inggris, dan mengarang tanda untuk keduanya lebih buruk daripada kehilangannya, jadi keduanya dijatuhkan — itulah sebabnya تعلم kembali sebagai tlm, tiga huruf dari empat. Vokal adalah kehilangan yang lebih terkenal dan bukan satu-satunya. Bentuk path Unicode di sebelah slug tak punya satu pun dari kedua masalah itu, karena ia tak mentransliterasi apa pun.
Bisakah URL mengandung Ibrani, Arab, atau Tionghoa langsung?
Ya. Path boleh menampung karakter Unicode apa pun; ia persen-terkodekan sebagai UTF-8 ketika dikirim dan ditampilkan terbaca oleh peramban. 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 e superskrip kecil — sementara Prancis dan Spanyol memperlakukan diakritik mereka sebagai tanda pada huruf yang selain itu adalah dirinya sendiri. Setelan bahasa memilih 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 peramban Anda; tak ada yang diunggah atau dicatat, dan ia bekerja tanpa koneksi jaringan.

Alat terkait