Saya perlu membangun fungsi yang mem-parsing domain dari URL.
Jadi, dengan
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
atau
http://www.google.com/dhasjkdas/sadsdds/sdda/sdads.html
itu harus kembali google.com
dengan
http://google.co.uk/dhasjkdas/sadsdds/sdda/sdads.html
itu harus kembali google.co.uk
.
parse_url()
mengembalikan host , bukan domain .parse_url
daripada "apa yang bisa saya lakukan".Jawaban:
Lihat
parse_url()
:parse_url
tidak menangani url yang benar-benar rusak sangat baik, tetapi baik-baik saja jika Anda biasanya mengharapkan url yang layak.sumber
parse_url
tidak menangani subdomain, tetapi Purl melakukannya: github.com/jwage/purlparse_url()
mungkin akan mem-parsing URL dengan domain yang mengandung tanda hubung salah. Tidak dapat menemukan bukti yang pasti, tetapi periksa bug ini .FILTER_VALIDATE_URL
gunakan secaraparse_url()
internal.print parse_url($url, PHP_URL_HOST))
jika Anda tidak membutuhkan$parse
array untuk hal lain.Ini akan mengembalikan
google.com
untuk http://google.com/ ... dan http://www.google.com/ ...sumber
Dari http://us3.php.net/manual/en/function.parse-url.php#93983
sumber
host
danpath
.Message: Undefined index: host
ada ide untuk memperbaikinya?!empty($parseUrl['host'])
.Kode yang dimaksudkan untuk bekerja 100% tampaknya tidak memotongnya untuk saya, saya sedikit menambal contoh tetapi menemukan kode yang tidak membantu dan masalah dengan itu. jadi saya mengubahnya menjadi beberapa fungsi (untuk menyimpan meminta daftar dari Mozilla sepanjang waktu, dan menghapus sistem cache). Ini telah diuji terhadap satu set 1000 URL dan tampaknya berfungsi.
Kemudian gunakan seperti
Saya tahu saya seharusnya mengubah ini menjadi kelas, tetapi tidak punya waktu.
sumber
sumber
Jika Anda ingin mengekstrak host dari string
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
, penggunaan parse_url () adalah solusi yang dapat Anda terima.Tetapi jika Anda ingin mengekstrak domain atau bagian-bagiannya, Anda memerlukan paket yang menggunakan Daftar Sufiks Publik . Ya, Anda dapat menggunakan fungsi string di sekeliling parse_url (), tetapi terkadang hasilnya salah.
Saya merekomendasikan TLDExtract untuk penguraian domain, berikut adalah contoh kode yang menunjukkan diff:
sumber
Saya telah menemukan bahwa solusi @ philfreo (dirujuk dari php.net) cukup baik untuk mendapatkan hasil yang baik tetapi dalam beberapa kasus ini menunjukkan pesan "pemberitahuan" dan "Standar Ketat" php. Di sini versi tetap dari kode ini.
sumber
Berikut adalah kode yang saya buat yang 100% hanya menemukan nama domain, karena dibutuhkan mozilla sub tlds ke akun. Satu-satunya hal yang harus Anda periksa adalah bagaimana Anda membuat cache dari file itu, jadi Anda tidak meminta mozilla setiap kali.
Untuk beberapa alasan aneh, domain seperti co.uk tidak ada dalam daftar, jadi Anda harus melakukan peretasan dan menambahkannya secara manual. Ini bukan solusi terbersih tetapi saya harap ini membantu seseorang.
sumber
co.uk
tidak ada dalam daftar, adalah karena itu adalah daftar TLD, bukan domain. CcTLD telah banyak berubah sejak jawaban ini ditulis. Khususnya: "Registrasi baru langsung di bawah .uk telah diterima oleh Nominet sejak 10 Juni 2014 08:00 BST, namun ada periode reservasi untuk pelanggan lama yang sudah memiliki .co.uk, .org.uk, .me.uk , .net.uk, .ltd.uk atau .plc.uk domain untuk mengklaim domain .uk yang sesuai, yang berjalan hingga 07:59 BST pada 10 Juni 2019. " ( Sumber )Anda dapat meneruskan PHP_URL_HOST ke fungsi parse_url sebagai parameter kedua
sumber
sumber
Harap pertimbangkan untuk mengganti solusi yang diterima dengan yang berikut:
parse_url () akan selalu menyertakan sub-domain, jadi fungsi ini tidak menguraikan nama domain dengan sangat baik. Berikut ini beberapa contohnya:
Sebaliknya, Anda dapat mempertimbangkan solusi pragmatis ini. Ini akan mencakup banyak, tetapi tidak semua nama domain - misalnya, domain tingkat rendah seperti 'sos.state.oh.us' tidak tercakup.
Akhirnya, PHP Domain Parser milik Jeremy Kendall memungkinkan Anda untuk menguraikan nama domain dari url. League URI Hostname Parser juga akan melakukan pekerjaan itu.
sumber
parse_url tidak bekerja untuk saya. Itu hanya mengembalikan jalan. Beralih ke dasar menggunakan php5.3 +:
sumber
Saya telah mengedit untuk Anda:
Semua jenis url (www.domain.ltd, sub1.subn.domain.ltd akan menghasilkan: domain.ltd.
sumber
Saya menambahkan jawaban ini terlambat karena ini adalah jawaban yang paling banyak muncul di Google ...
Anda dapat menggunakan PHP untuk ...
untuk mengambil host tetapi bukan domain pribadi yang dirujuk oleh host. (Contoh
www.google.co.uk
adalah tuan rumah, tetapigoogle.co.uk
adalah domain pribadi)Untuk mengambil domain pribadi, Anda harus mengetahui daftar sufiks publik tempat seseorang dapat mendaftarkan domain pribadi. Daftar ini kebetulan dikuratori oleh Mozilla di https://publicsuffix.org/
Kode di bawah ini berfungsi ketika array sufiks publik telah dibuat. Cukup telepon
dengan kode yang tersisa ...
sumber
Ini umumnya akan bekerja dengan sangat baik jika URL input bukan sampah total. Ini menghapus subdomain.
Contoh
Memasukkan:
http://www2.website.com:8080/some/file/structure?some=parameters
Keluaran:
website.com
sumber
Menggabungkan jawaban dari worldofjr dan Alix Axel menjadi satu fungsi kecil yang akan menangani sebagian besar kasus penggunaan:
sumber
sumber
Lihat parse_url ()
sumber
Cukup gunakan seperti berikut ...
sumber