Saya ingin memiliki fungsi untuk membuat siput dari string Unicode, misalnya gen_slug('Andrés Cortez')
harus kembali andres-cortez
. Bagaimana saya harus melakukan itu?
php
internationalization
slug
Andres SK
sumber
sumber
andres
. Apakah Anda yakin input Anda persis "andrés"?Jawaban:
Alih-alih ganti yang panjang, coba yang ini:
Ini didasarkan pada yang ada di tutorial Jobeet milik Symfony.
sumber
^
tepat setelah braket pembuka - itu membalikkan pertandingan.iconv
tidak akan mengonversi dengan benar jika$text
berisi karakter yang tidak memiliki ascii yang setara. Misalnyaiconv('utf-8', 'us-ascii//TRANSLIT', "EFI收购Cretaprint")
akan kembali"EFI"
dan membocorkan peringatan.$text = trim($text, '-');
harus pada akhirnya, jika tidakFoo 收
menjadifoo-
. Juga,Foo 收 Bar
menjadifoo--bar
(yang diulang-
tampaknya berlebihan).Memperbarui
Karena jawaban ini mendapat perhatian, saya menambahkan beberapa penjelasan.
Solusi yang diberikan pada dasarnya akan menggantikan semuanya kecuali AZ, az, 0-9, & - (tanda hubung) dengan - (tanda hubung). Jadi, itu tidak akan berfungsi dengan baik dengan karakter unicode lainnya (yang merupakan karakter valid untuk slug / string URL). Skenario umum adalah ketika string input berisi karakter non-Inggris.
Hanya gunakan solusi ini jika Anda yakin bahwa string input tidak akan memiliki karakter unicode yang Anda mungkin ingin menjadi bagian dari output / siput.
Misalnya. "नारी शक्ति" akan menjadi "----------" (semua tanda hubung) alih-alih "नारी-शक्ति" (slug URL yang valid).
Jawaban Asli
Bagaimana tentang...
?
sumber
strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', "Étienne")))
mengembalikan"-tienne"
bukan"etienne"
, jadi itu tidak berfungsi dengan karakter beraksen.Jika Anda telah menginstal ekstensi intl , Anda dapat menggunakan fungsi Transliterator :: transliterate untuk membuat siput dengan mudah.
sumber
Catatan: Saya telah mengambil ini dari wordpress dan berhasil !!
Gunakan seperti ini:
Kode
sumber
sanitize_title_with_dashes($string, null, 'save')
(perhatikan parameter tambahan), jika tidak, Anda akan mendapatkan beberapa kode karakter yang berantakantelstra%e2%80%99s-%e2%80%98all-roles-flex%e2%80%99
. Tidak terlalu cantik. :-(sanitize
adalah nama fungsi yang aneh dan dapat dilupakan untuk menghasilkan siput.Itu selalu merupakan ide yang baik untuk menggunakan solusi yang ada yang didukung oleh banyak pengembang tingkat tinggi. Yang paling populer adalah https://github.com/cocur/slugify . Pertama-tama, ini mendukung lebih dari satu bahasa, dan sedang diperbarui.
Jika Anda tidak ingin menggunakan seluruh paket, Anda dapat menyalin bagian yang Anda butuhkan.
sumber
Berikut ini yang lain, misalnya "Judul dengan karakter aneh ééé AX Z" menjadi "judul-dengan-karakter-aneh-eee-axz".
sumber
Versi terbaru dari kode @Imran Omar Bukhsh (dari cabang Wordpress (4.0) terbaru):
Lihat contoh online .
sumber
%c2%abgq%c2%bb-elyas-mbarek-geh%c3%b6rt-zu-m%c3%a4nnern-des-jahres
sumber
Jangan gunakan preg_replace untuk ini. Ada fungsi php yang dibangun hanya untuk tugas: strtr () http://php.net/manual/en/function.strtr.php
Diambil dari komentar di tautan di atas (dan saya mengujinya sendiri; berfungsi:
sumber
Saya menggunakan:
Satu-satunya kekurangan adalah bahwa karakter Cyrillic tidak akan dikonversi, dan saya sedang mencari solusi yang tidak lama str_replace untuk setiap karakter Cyrillic tunggal.
sumber
set_locale('cyrillic.UTF-8')
terlebih dahulu. Nilai persisnya tergantung pada lokal yang Anda instal.Saya tidak tahu yang mana yang harus digunakan jadi saya membuat bangku cepat di phptester.net
Awal:
Hasil keluaran:
Diperlukan tes lebih lanjut.
Sunting: tes iterasi yang lebih sedikit
Awal:
Hasil keluaran:
sumber
Anda bisa melihatnya
Normalizer::normalize()
, lihat di sini . Itu hanya perlu memuat modul intl untuk PHPsumber
Bagaimana dengan menggunakan sesuatu yang sudah diterapkan di Core?
Atau salah satu metode penulisan ulang url / url inti ..
sumber
Karena gTLD dan IDN semakin banyak digunakan, saya tidak bisa melihat mengapa URL tidak boleh mengandung Andrés.
Hanya rawurlencode $ URL yang Anda inginkan. Sebagian besar peramban menampilkan karakter UTF-8 dalam URL (mungkin bukan IE6 kuno) dan bit.ly / goo.gl dapat digunakan untuk membuatnya singkat dalam kasus-kasus seperti Rusia dan Arab jika perlu untuk keperluan iklan atau hanya menuliskannya di iklan seperti pengguna akan menulisnya di URL browser.
Satu-satunya perbedaan adalah spasi "" mungkin merupakan ide bagus untuk menggantinya dengan "-" dan "/" jika Anda tidak ingin mengizinkannya.
URL sebagai dikodekan http://www.hurtta.com/RU/%D0%9F%D1%80%D0%BEDD0%B4%D1%83%D0%BA%D1%82%D1%8B/
Url seperti yang tertulis http://www.hurtta.com/RU/Продукты/
sumber
Saya menulis ini berdasarkan tanggapan Maerlyn. Fungsi ini akan berfungsi terlepas dari pengkodean karakter pada halaman. Itu juga tidak akan mengubah tanda kutip tunggal menjadi tanda hubung :)
sumber
pada localhost saya semuanya baik-baik saja, tetapi pada server itu membantu saya "set_locale" dan "utf-8" di "mb_strtolower".
sumber
Cara paling elegan menurut saya adalah menggunakan Behat \ Transliterator \ Transliterator.
Saya perlu memperluas kelas ini dengan kelas Anda karena ini adalah abstrak, beberapa seperti ini:
Dan kemudian, gunakan saja:
Tentu saja Anda harus meletakkan semua ini di komposer Anda juga.
Info lebih lanjut di sini https://github.com/Behat/Transliterator
sumber
Ada solusi bagus di sini yang berhubungan dengan karakter khusus juga.
Texto Fantástico => texto-fantastico
Penulis: Natxet
sumber
Ini mungkin cara untuk melakukannya juga. Terinspirasi dari tautan ini, Pertukaran ahli dan alinalexander
sumber
Karena saya telah melihat banyak metode di sini tetapi saya telah menemukan metode paling sederhana untuk diri saya sendiri. Mungkin itu akan membantu seseorang.
sumber
Bagi saya varian ini sempurna, juga berubah
&
menjadiand
. Ini kode:sumber