URL slug üreteci
Bir başlığı URL slug'ına çevirir; İbranice, Arapça, Kiril ve Yunancayı çevriyazar, yanında Unicode yol biçimi ve listeler için çakışma denetimiyle.
creme-brulee-grusse-aus-munchencrème-brûlée-grüße-aus-münchencr%C3%A8me-br%C3%BBl%C3%A9e-gr%C3%BC%C3%9Fe-aus-m%C3%BCnchenBir tarayıcı yukarıdaki okunabilir biçimi gösterir ve bunu gönderir. İkisi de aynı yoldur.
Bu araç ne yapar
Herhangi bir betikte bir başlık yapıştırın, bir URL'nin taşıyabileceği slug olarak geri gelir: küçük harf, noktalama yok, seçtiğiniz bir ayırıcıyla birleştirilmiş kelimeler. Latin aksanları kaldırılır ve İbranice, Arapça, Kirilce ve Yunanca Latin harflerine çevriyazılır.
Slug'ın yanında aynı başlık kendi betiğinde tutulmuş olarak durur. O biçim de yasal bir yoldur ve çevriyazıda en çoğu kaybeden betikler için çoğu zaman daha iyi yanıttır — bu yüzden aracın sizin için seçmesi yerine ikisi de tek bir başlıktan üretilir.
Bir slug ne içindir
Bir slug, bir URL'nin insanların okuyabildiği kısmıdır: son eğik çizgiden sonraki, sayfayı numaralandırmak yerine adlandıran parça. Var, çünkü kelime olarak okunan bir yol bir mesaja yapıştırılmaktan, bir slaytta yazdırılmaktan ya da bir telefonda sesli okunmaktan sağ çıkar ve sayısal bir kimlik bunların hiçbirini yapmaz.
Şeklin bu kadar kısıtlı olmasının nedeni de budur. Bir slug kararlı olmalıdır — onu değiştirmek zaten sayfayı gösteren her bağlantıyı bozar — ve elle yazıldığında belirsizlikten uzak olmalıdır, ki bu boşlukları, bir okurun yeniden üretip üretemeyeceği büyük harfleri ve bir kabuğa ya da bir Markdown ayrıştırıcısına bir şey ifade eden noktalamayı dışlar.
Aksanlar nasıl kalkar
Çoğu Latin aksanı bir tablo tarafından değil, platform tarafından kaldırılır. Unicode, é'yi düz bir e'nin ardından birleştirici bir keskin aksana ayrıştırılabilir olarak tanımlar; böylece o ayrıştırılmış biçime normalleştirmek ve sonra her birleştirici işareti atmak düz harfi geride bırakır. Aynı işlem ñ, ç, ő ve birkaç yüz tanesini daha ele alır ve tarihi geçemez, çünkü tarayıcının zaten gönderdiği Unicode verisini kullanır.
Her şeyi ele almaz ve boşluk hakkında bilmeye değer. İşareti, glifin üstündeki bir işaret değil, glifin içinden geçen bir çizgi olan bir harf — ø, ł, đ, ħ, ŧ — hiç ayrıştırması olmayan tek, bölünmez bir karakterdir; bu yüzden işaretleri kaldırmak onu tam olduğu gibi bırakır. Bir ligatür de öyle: ß, æ ve œ'nin her biri bir harf artı süsleme için değil, bir ses dizisi için durur. Bunların hepsi açık bir yazım gerektirir ve onsuz slug'dan yalnızca kaybolurlardı.
Dil ayarı yanıtı neden değiştirir
ü'nün tek bir doğru romanlaştırması yoktur. Almanca onu diyerezis var olmadan önce ue olarak yazmıştır — iki nokta küçük bir üst simge e olarak başladı — bu yüzden Müller doğru biçimde mueller'dir ve bir Alman okur muller'i yanlış bulur. Fransızca, İspanyolca ve Portekizce aksanlarını, aksi hâlde kendisi olan bir harf üzerindeki işaretler olarak ele alır; bu yüzden crème brûlée doğru biçimde creme-brulee'dir ve onu cruemme olarak yazmak saçmalık olurdu.
Kuzey dilleri aynı şekilde birbiriyle anlaşamaz. Danca ve Norveççe, harfin yerini aldığı eski yazımı izleyerek ünlüyü ikiye katlar; İsveççe katlamaz:
- Almanca — ä, ae olur, ö, oe olur, ü, ue olur, ß, ss olur. München, muenchen'dir.
- Danca ve Norveççe — æ, ae olur, ø, oe olur, å, aa olur. Ålborg, aalborg'dur.
- İsveççe — ä, a olur, ö, o olur, å, a olur. Ålborg, alborg'dur.
- Genel — her işaret düşürülür ve temel harf tutulur. Ålborg, alborg'dur, München, munchen'dir.
Bunlar tek bir yanıtın rakip yaklaşımları değildir; dört farklı soruya dört farklı doğru yanıttır. Yalnızca biri varsayılan olabilir; bu yüzden ayar görünürdür ve araç, baktığınız şeyi hangi kuralın ürettiğini söyler. Bir harf her yerde aynıdır: ß bir aksan değil, bir ligatürdür; bu yüzden onu düşürmek bir sesi silerdi ve burada her ayarda ss'dir.
Bir tabloya ihtiyaç duyan betikler
Tarayıcıdaki hiçbir şey Kirilceyi, Yunancayı, İbraniceyi ya da Arapçayı romanlaştırmaz; bu yüzden her biri, yayımlanmış bir standarda karşı elle yazılmış bir tablodur. İkisi iyi çıkar, çünkü ünlülerini yazarlar:
- Kirilce, İngilizce haritalar ve pasaportlardaki romanlaştırma olan BGN/PCGN'yi izler: ж, zh'dir, ч, ch'dir, щ, shch'dir, х, kh'dir. Москва, moskva olur ve Чехов, chekhov olur.
- Yunanca, tanımladığı digrafler dahil ELOT 743'ü izler: ου, oy değil ou'dur ve ευ, ev'dir. Αθήνα, athina olur ve Ευρώπη, evropi olur.
ISO 9, diğer iyi bilinen Kiril standardıdır ve burada bilerek kullanılmaz. Tersine çevrilebilirdir, ki amacı budur, ama bunu aksanlarla başarır: ж, ž'dir. Bir slug'ın bir çengel (caron) için yeri yoktur; bu yüzden hemen z'ye düzleşirdi — ve Жуков ile Зуков aynı slug olurdu. BGN digrafı düzleşmeden sağ çıkar.
Kiril tablosunda yanlış yapması kolay ve belirtmeye değer bir ayrıntı. ё ve й aksanlı harfler gibi görünür ve Unicode onları o şekilde ayrıştırır, ama işaret, onları aynı harf üzerinde süsleme değil, farklı harfler yapan şeydir. Tabloya bakmadan önce işaretleri soymak — buradaki diğer her betik için doğru sıra — sessizce Ёлка'yı elka'ya ve Андрей'i andrei'ye çevirir.
İbranice ve Arapça ve ne kaybettikleri
Her iki betik de ünsüzleri yazar ve çoğu ünlüyü sıradan metnin taşımadığı noktalara bırakır. Bu, bu aracın daha iyi bir tabloyla çözebileceği bir kodlama sorunu değildir: bilgi metinde yok. מאמר dört harftir, mem-alef-mem-resh ve maamar okuması, kelimeyi zaten bilen bir okurdan gelir. Harf harf yalnızca mamr olabilir.
Yapılabilecek olan yapılır. Bir harf bir ünlü işareti olarak da hizmet ettiğinde konum kullanılır, çünkü noktalanmamış metnin bıraktığı tek sinyal budur:
- ו ve י bir kelimenin başında ünsüz ve içinde ünlü harfleridir; שלום'u shlvm yerine shlom'a çeviren budur.
- İkiye katlanmış bir וו ya da יי her iki yerde de ünsüzdür — o ikiye katlanma, İbranice'nin iki okumayı ayırt etme biçiminin ta kendisidir.
- ב, כ ve פ bir kelimenin başında bir kapantı ve içinde bir sürtünmelidir. Farkı işaretleyen dageş bir ünlü noktasıdır; bu yüzden geriye kalan yalnızca konumdur.
- Bir gereşin izlediği bir harf, alfabenin harfi olmayan sestir: ג׳, j'dir, צ׳, ch'dir, ז׳, zh'dir. Onu yok saymak ג׳אז'ı farklı bir kelimeye çevirirdi.
- Arapça vurgulu ünsüzler, ASCII'nin onları ayırt eden alttaki noktayı koyacak yeri olmadığı için düz karşılıklarına çöker. صابر ve سابر aynı slug'ı üretir.
Sonuç okunabilir ve tanınabilirdir ve kimsenin doğru diyeceği bir yazım değildir. Araç, kayıplı bir yanıtı bitmiş bir yanıtmış gibi sunmak yerine her İbranice ya da Arapça sonuçta bunu söyler — ve hiçbir şey kaybetmeyen aşağıdaki biçimi gösterir.
Çevriyazı gerektirmeyen Unicode yol
Bir URL yolu ASCII ile sınırlı değildir. RFC 3987, IRI'yi tanımlar — herhangi bir Unicode karakteri içerebilen bir tanımlayıcı — ve birini tele koyma kuralı, UTF-8 baytlarını yüzde kaçışları olarak kodlamaktır. Her tarayıcı bunu yirmi yıldır yapar; Wikipedia'nın İbranice ve Rusça makale başlıklarını kendi adları altında sunmasının ve adres çubuğunun onları okunabilir göstermesinin nedeni budur.
Yani buradaki ikinci çıktı, noktalaması ve boşluğu temizlenmiş ve başka hiçbir şeye dokunulmamış başlıktır ve üçüncüsü bunun telde gerçekte nasıl göründüğüdür. İkisi aynı yoldur: okunabilir olan, bir tarayıcının gösterdiği ve bir kişinin kopyaladığıdır ve kodlanmış olan, sunucunun günlüğe yazdığıdır.
Hangisini kullanacağınız bir formalite değil, gerçek bir karardır. Unicode biçimi hiçbir şey kaybetmez, dili konuşan herkese doğru okunur ve bir arama motorunun göstereceği şeydir. Çevriyazılmış biçim, kodlamaları bozan yerlere yapıştırılmaktan sağ çıkar, ASCII yolları varsayan sistemlere sığar ve bir telefonda sesli okunabilir. Özellikle İbranice ve Arapça için Unicode biçimi genellikle daha iyi yanıttır, tam da çevriyazı ünlüleri geri getiremediği için.
Çakışmalar ve neden sizin için çözülmedikleri
Slug'lamak noktalamayı soyar; bu yüzden yalnızca noktalamada farklı başlıklar hiç farklı olmaktan çıkar. «Our guide to CSS» ve «Our guide to CSS!» iki gönderi ve bir slug'dır. Liste modunda böyle her çakışma, çakıştığı satırla işaretlenir, çünkü bu, bir içerik yönetim sisteminin gizlediği hatadır: sessizce bir son ek ekler, yayımlar ve beklediğiniz URL diğer gönderiye aittir.
Son ek bir düğme olarak sunulur ve WordPress ve Django tarzını üretir — our-guide-to-css, our-guide-to-css-2 — bir listenin olduğu gibi bir yere yapıştırılması amaçlandığı durum için. Varsayılan olarak kapalıdır, çünkü bir çakışma genellikle bir adlandırma sorunundan çok bir içerik sorunudur ve çakışma, düğme açık olduğunda bile işaretli kalır; böylece onu açmak hiçbir şeyi gizlemez.
Uzunluk ve doğru yerde kesme
Bir uzunluk sınırı bir ayırıcı sınırında keser, asla bir kelimenin içinde değil. Kelime ortasında kırpmak, daha kısa bir slug üretmekten çok farklı bir tane üretir — introduction-to-crypt, daha derli toplu bir introduction-to-cryptography değildir — ve yarım bir kelime, başka bir şey ifade eden bir kelimedir. Tek bir kelime sınırdan uzunsa, üzerinde kesilecek bir sınır yoktur ve dilimlenmek yerine bütün olarak döndürülür.
Evrensel olarak doğru bir sınır yoktur. Arama motorları bir URL'nin kabaca ilk altmış-yetmiş karakterini gösterir ve eski sistemler bazen bir yol segmentini sınırlar, ama hiçbir şey belirli bir sayıda bozulmaz. Alanı boş bırakmak slug'ı başlığın ihtiyaç duyduğu kadar uzun bırakır.
Sıkça sorulan sorular
- Bir URL slug'ında hangi karakterler güvenlidir?
- Küçük harfli ASCII harfleri, rakamlar ve tek bir ayırıcı istisnasız her yerde çalışır. Tire geleneksel ayırıcıdır; alt çizgi özdeş biçimde çalışır ama altı çizili bir bağlantının altında görülmesi daha zordur. Boşluklar, büyük harfler ve noktalama teknik olarak kodlanabilir ve pratikte sorun çıkarır; bu yüzden bir slug onları soyar.
- Tire mi alt çizgi mi?
- Bir tire, modayı aşan iki nedenle. Her büyük platformun kullandığı şeydir; bu yüzden okurların ve diğer araçların beklediği şeydir ve çoğu bağlantının taşıdığı altı çizginin altında kaybolur, ki bir alt çizgi kaybolmaz. Seçim burada sunulur, çünkü var olan sistemlerin var olan kuralları vardır ve tek bir site içindeki tutarlılık her iki yanıttan daha önemlidir.
- İbranice ya da Arapça başlığım neden ünlülerini kaybediyor?
- Çünkü hiç yazılmadılar. Her iki betik de çoğu ünlüyü sıradan metnin atladığı noktalarla işaretler; bu yüzden hangi kelimenin kastedildiğini tahmin eden bir seslendirme motoru olmadan herhangi bir aracın üretebileceği tek şey harf harf bir okumadır. Bu araç, gerçekte orada olanı çevriyazar, sonuçta bunu söyler ve başlığı tam olarak yazıldığı gibi tutan Unicode yol biçimini sunar.
- Bir URL doğrudan İbranice, Arapça ya da Çince içerebilir mi?
- Evet. Bir yol herhangi bir Unicode karakteri tutabilir; telde UTF-8 olarak yüzde kodlanır ve tarayıcı tarafından okunabilir gösterilir. Wikipedia'nın kapsadığı her dilde makale başlıklarını böyle sunar. Bu araç hem okunabilir biçimi hem kodlanmış olanı gösterir, çünkü ikincisi sunucu günlüklerinde ve analizde görünen şeydir.
- Müller neden bazen mueller bazen muller?
- Çünkü ikisi de farklı dillerde doğrudur. Almanca çift noktayı yazıya döker — iki nokta küçük bir üst simge e olarak yaşama başladı — Fransızca ve İspanyolca ise aksanlarını, aksi hâlde kendisi olan bir harf üzerindeki işaretler olarak ele alır. Dil ayarı bir kural seçer ve araç hangisini uyguladığını size söyler.
- İki başlığım neden aynı slug'ı üretiyor?
- Çünkü slug'lamak noktalamayı ve büyük/küçük harfi kaldırır, ki bu çoğu zaman iki başlığı ayıran tek şeydir. Liste modu her çakışmayı çakıştığı satırla işaretler. WordPress tarzı -2 son ekini açabilirsiniz, ama temeldeki soru — iki gönderinin gerçekten neredeyse aynı ada sahip olması gerekip gerekmediği — önce yanıtlamaya değer.
- Yazdığım herhangi bir şey bir sunucuya gönderiliyor mu?
- Hayır. Her dönüşüm tarayıcınızda çalışır; hiçbir şey yüklenmez ya da günlüğe yazılmaz ve ağ bağlantısı olmadan çalışır.