Apa ekspresi reguler lengkap yang bagus atau proses lain yang akan mengambil judul:
Bagaimana Anda mengubah judul menjadi bagian dari URL seperti Stack Overflow?
dan mengubahnya menjadi
how-do-you-change-a-title-to-be-part-of-the-url-like-stack-overflow
yang digunakan dalam URL ramah-SEO di Stack Overflow?
Lingkungan pengembangan yang saya gunakan adalah Ruby on Rails , tetapi jika ada beberapa solusi khusus platform (.NET, PHP, Django ), saya akan senang melihatnya juga.
Saya yakin saya (atau pembaca lain) akan menemukan masalah yang sama pada platform yang berbeda di telepon.
Saya menggunakan rute khusus, dan saya terutama ingin tahu cara mengubah string agar semua karakter khusus dihapus, semuanya huruf kecil, dan semua spasi putih diganti.
regex
language-agnostic
seo
friendly-url
slug
lebih bijaksana
sumber
sumber
Jawaban:
Begini cara kami melakukannya. Perhatikan bahwa mungkin ada kondisi tepi lebih dari yang Anda sadari pada pandangan pertama.
Ini adalah versi kedua, membuka gulungan untuk kinerja 5x lebih banyak (dan ya, saya membandingkannya). Saya pikir saya akan mengoptimalkannya karena fungsi ini dapat dipanggil ratusan kali per halaman.
Untuk melihat versi sebelumnya dari kode yang diganti ini (tetapi secara fungsional setara dengan, dan 5x lebih cepat), lihat riwayat revisi posting ini (klik tautan tanggal).
Juga,
RemapInternationalCharToAscii
kode sumber metode dapat ditemukan di sini .sumber
RemapInternationalCharToAscii()
fungsi itu ada di sana meta.stackexchange.com/questions/7435/…if (prevdash) sb.Length -= 1; return sb.ToString();
alih-alihif
pernyataan terakhir .sb.Length == maxlen break;
buggy jika tanda pada maxLenght-1 adalah "ß" ia akan dikonversi menjadi "ss"sb.Length == maxlene
tidak akan pernah benar, lebih baik daripada menguji(sb.Length > = maxlen)
.Ini adalah versi saya dari kode Jeff. Saya telah membuat perubahan berikut:
Konversi kasus sekarang juga opsional.
Untuk lebih jelasnya, unit test, dan penjelasan mengapa Facebook 's URL skema adalah pintar sedikit dari Stack Overflows, aku punya versi yang diperluas ini di blog saya .
sumber
if (i == maxlen) break;
terjadiif (sb.Length == maxlen) break;
sehingga jika Anda memasukkan string dengan banyak spasi putih / karakter yang tidak valid Anda masih bisa mendapatkan siput dengan panjang yang diinginkan, sedangkan kode yang berdiri mungkin berakhir memotongnya secara besar-besaran (mis. pertimbangkan kasus di mana Anda mulai dengan 80 spasi ...). Dan tolok ukur kasar 10.000.000 iterasi terhadap kode Jeff menunjukkan bahwa kecepatannya kira-kira sama.Anda akan ingin mengatur rute khusus untuk mengarahkan URL ke pengontrol yang akan menanganinya. Karena Anda menggunakan Ruby on Rails, di sini ada pengantar dalam menggunakan mesin perutean mereka.
Di Ruby, Anda akan memerlukan ekspresi reguler seperti yang Anda sudah tahu dan inilah ekspresi reguler untuk digunakan:
sumber
Anda juga dapat menggunakan fungsi JavaScript ini untuk menghasilkan siput dalam-bentuk (yang ini berdasarkan / disalin dari Django ):
sumber
Sebagai tambahan, inilah fungsi PHP di WordPress yang melakukannya ... Saya pikir WordPress adalah salah satu platform yang lebih populer yang menggunakan tautan mewah.
Fungsi ini dan juga beberapa fungsi pendukung dapat ditemukan di wp-include / formatting.php.
sumber
remove_accents
,seems_utf8
...git clone git://core.git.wordpress.org/
dan menemukanwp-includes/formatting.php
file keJika Anda menggunakan tepi Rails, Anda dapat mengandalkan Inflector.parametrize - inilah contoh dari dokumentasi:
Juga jika Anda perlu menangani karakter yang lebih eksotis seperti aksen (éphémère) di versi Rails sebelumnya, Anda dapat menggunakan campuran PermalinkFu dan DiacriticsFu :
sumber
Saya tidak terbiasa dengan Ruby on Rails, tetapi yang berikut adalah (tidak teruji) kode PHP. Anda mungkin dapat menerjemahkan ini dengan sangat cepat ke Ruby on Rails jika Anda merasa berguna.
Saya harap ini membantu.
sumber
Saya tidak banyak tentang Ruby atau Rails, tetapi di Perl, inilah yang akan saya lakukan:
Saya baru saja melakukan tes cepat dan sepertinya berhasil. Semoga ini relatif mudah untuk diterjemahkan ke Ruby.
sumber
Implementasi T-SQL, diadaptasi dari dbo.UrlEncode :
sumber
Saya tahu ini pertanyaan yang sangat lama, tetapi karena sebagian besar browser sekarang mendukung url unicode, saya menemukan solusi hebat di XRegex yang mengubah segalanya kecuali huruf (dalam semua bahasa menjadi '-').
Itu bisa dilakukan dalam beberapa bahasa pemrograman.
Polanya adalah
\\p{^L}+
dan kemudian Anda hanya perlu menggunakannya untuk mengganti semua bukan huruf ke '-'.Contoh kerja di node.js dengan modul xregex .
sumber
Dengan asumsi bahwa kelas model Anda memiliki atribut judul, Anda dapat dengan mudah menimpa metode to_param dalam model, seperti ini:
Episode Railscast ini memiliki semua detail. Anda juga dapat memastikan bahwa judul hanya berisi karakter yang valid menggunakan ini:
sumber
Kode Brian, di Ruby:
downcase
ternyata string ke huruf kecil,strip
menghilangkan terkemuka dan trailing spasi, pertamagsub
panggilan g lobally sub ruang stitutes dengan tanda hubung, dan Menghapus kedua segala sesuatu yang tidak surat atau tanda hubung.sumber
Ada plugin Ruby on Rails kecil yang disebut PermalinkFu , yang melakukan ini. The Metode melarikan diri melakukan transformasi menjadi string yang cocok untuk URL . Lihatlah kodenya; Metode itu cukup sederhana.
Untuk menghapus karakter non- ASCII, ia menggunakan ikonv lib untuk menerjemahkan ke 'ascii // diabaikan // translit' dari 'utf-8'. Spasi kemudian berubah menjadi garis putus-putus, semuanya diturunkan, dll.
sumber
Anda dapat menggunakan metode pembantu berikut. Itu dapat mengkonversi karakter Unicode.
sumber
Inilah kode Jeff versi saya (lebih lambat, tetapi menyenangkan):
String pengujian saya:
" I love C#, F#, C++, and... Crème brûlée!!! They see me codin'... they hatin'... tryin' to catch me codin' dirty... "
sumber
The solusi stackoverflow besar, namun browser modern (tidak termasuk IE, seperti biasa) sekarang menangani encoding baik utf8:
Jadi saya memutakhirkan solusi yang diusulkan:
Kode Lengkap tentang Pastebin
Sunting: Berikut kode untuk
RemapInternationalCharToAscii
metode (yang tidak ada dalam pastebin).sumber
Saya suka cara ini dilakukan tanpa menggunakan ekspresi reguler , jadi saya porting ke PHP. Saya baru saja menambahkan fungsi yang dipanggil
is_between
untuk memeriksa karakter:sumber
Sekarang semua Browser menangani pengkodean utf8 dengan baik, sehingga Anda dapat menggunakan Metode WebUtility.UrlEncode , seperti HttpUtility.UrlEncode yang digunakan oleh @giamin tetapi berfungsi di luar aplikasi web.
sumber
Saya mengirim kode ke TypeScript. Itu dapat dengan mudah disesuaikan dengan JavaScript.
Saya menambahkan
.contains
metode keString
prototipe, jika Anda menargetkan browser terbaru atau ES6 yang dapat Anda gunakan.includes
sebagai gantinya.sumber
Tidak tidak Tidak. Anda semua sangat salah. Kecuali untuk hal-hal diakritik-fu, Anda sudah sampai di sana, tapi bagaimana dengan karakter Asia (malu pada pengembang Ruby karena tidak mempertimbangkan nihonjin mereka saudara-saudara mereka).
Firefox dan Safari keduanya menampilkan karakter non-ASCII di URL , dan terus terang mereka terlihat hebat. Sangat menyenangkan untuk mendukung tautan seperti ' http://somewhere.com/news/read/ お 前 た ち は ア ア ホ じ ゃ な な い か い '.
Jadi, inilah beberapa kode PHP yang akan melakukannya, tetapi saya baru saja menulisnya dan belum stres untuk mengujinya.
Contoh:
Output: コ リ ン -dan- ト ー マ ス -dan- ア ー ノ ル ド
Tanda '-dan-' adalah karena & bisa diubah menjadi '-dan-'.
sumber