Trên trang này, bạn có thể tìm thấy tất cả các phiên bản của gói php jeremykendall/php-domain-parser. Có thể tải xuống/cài đặt các phiên bản này mà không cần Composer. Các phụ thuộc có thể được giải quyết tự động
Trình phân tích tên miền PHP
Trình phân tích tên miền PHP là trình phân tích cú pháp tên miền dựa trên tài nguyên được triển khai trong PHP
Động lực
Mặc dù có sẵn rất nhiều trình phân tích cú pháp và trình tạo URL tuyệt vời, nhưng có rất ít dự án có thể phân tích chính xác tên miền thành tên miền phụ thành phần, tên miền có thể đăng ký, tên miền cấp hai và các phần hậu tố công khai.
Xem xét tên miền www. ưu tiên. okinawa. jp. Trong miền này, phần hậu tố công khai là okinawa. jp, tên miền có thể đăng ký là pref. okinawa. jp, tên miền phụ là www và tên miền cấp hai là pref.
Bạn không thể regex đó.
Trình phân tích tên miền PHP tuân thủ xung quanh
- phân tích cú pháp dựa trên Danh sách hậu tố công khai chính xác
- phân tích danh sách tên miền cấp cao nhất IANA chính xác
Cài đặt
nhà soạn nhạc
$ composer require jeremykendall/php-domain-parser
yêu cầu hệ thống
Bạn cần
- PHP >= 7. 4 nhưng phiên bản ổn định mới nhất của PHP được khuyến nghị
- phần mở rộng
4resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[]; $newDomain = $domain ->withLabel[1, 'com'] //replace 'example' by 'com' ->withoutLabel[0, -1] //remove the first and last labels ->append['www'] ->prepend['docs.example']; echo $domain->toString[]; //display 'www.example.com' echo $newDomain->toString[]; //display 'docs.example.com.www' $newDomain->clear[]->labels[]; //return [] echo $domain->slice[2]->toString[]; //display 'www'
Cách sử dụng
Nếu bạn đang nâng cấp từ phiên bản 5, vui lòng kiểm tra hướng dẫn nâng cấp để biết các sự cố đã biết
Giải quyết tên miền
Thư viện này có thể giải quyết một tên miền chống lại
Trong cả hai trường hợp, điều này được thực hiện bằng cách sử dụng phương thức
resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
5 được triển khai trên thể hiện tài nguyên. Phương thức trả về một đối tượng resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
6 đại diện cho kết quả của quá trình đóĐối với Public Suffix List, bạn cần sử dụng lớp
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
0 như hình bên dưới// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
Bạn cũng có thể thêm hoặc xóa nhãn theo chỉ mục chính của chúng bằng các phương pháp sau
resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
CẢNH BÁO. Do định nghĩa của nó, một tên miền có thể là
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
1 hoặc một chuỗiĐể phân biệt khả năng này, đối tượng hiển thị hai [2] phương thức định dạng
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
2 có thể là // display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
1 hoặc một // display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
4 và // display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
5 sẽ luôn truyền giá trị miền thành một chuỗiuse Pdp\Domain;
$nullDomain = Domain::fromIDNA2008[null];
$nullDomain->value[]; // returns null;
$nullDomain->toString[]; // returns '';
$emptyDomain = Domain::fromIDNA2008[''];
$emptyDomain->value[]; // returns '';
$emptyDomain->toString[]; // returns '';
Định dạng ASCII và Unicode
Tên miền ban đầu chỉ hỗ trợ các ký tự ASCII. Ngày nay, chúng cũng có thể được trình bày dưới dạng biểu diễn UNICODE. Việc chuyển đổi giữa cả hai định dạng được thực hiện bằng cách triển khai tuân thủ UTS#46, còn được gọi là Xử lý tương thích Unicode IDNA. Các đối tượng miền hiển thị một phương thức
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
6 và // display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
7 trả về một thể hiện mới ở định dạng đã chuyển đổi// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
2Mặc định thư viện sử dụng thuật toán IDNA2008 để chuyển đổi tên miền giữa 2 định dạng. Vẫn có thể sử dụng thuật toán chuyển đổi kế thừa được gọi là IDNA2003
Vì không thể chuyển đổi trực tiếp giữa cả hai thuật toán nên bạn cần phải cụ thể rõ ràng khi xây dựng thuật toán nào bạn sẽ sử dụng khi tạo một phiên bản miền mới thông qua đối tượng
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
8. Điều này được thực hiện thông qua hai [2] hàm tạo có tên
9// display // uk // co // bbc // www $publicSuffixDomain = $result->suffix[]->domain[]; $publicSuffixDomain->labels[]; // returns ['uk', 'co']
0resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[]; $newDomain = $domain ->withLabel[1, 'com'] //replace 'example' by 'com' ->withoutLabel[0, -1] //remove the first and last labels ->append['www'] ->prepend['docs.example']; echo $domain->toString[]; //display 'www.example.com' echo $newDomain->toString[]; //display 'docs.example.com.www' $newDomain->clear[]->labels[]; //return [] echo $domain->slice[2]->toString[]; //display 'www'
Tại bất kỳ thời điểm nào, phiên bản
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
8 có thể cho bạn biết liệu nó có ở chế độ resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
2 hay khôngSau khi khởi tạo, không có cách nào để biết thuật toán nào được sử dụng để chuyển đổi đối tượng từ ascii sang unicode và ngược lại
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
8TIỀN BOA. Luôn ưu tiên gửi một đối tượng
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
8 để giải quyết thay vì một chuỗi hoặc một đối tượng có thể được truyền thành một chuỗi để tránh các lỗi/kết quả chuyển đổi định dạng không mong muốn. Theo mặc định và việc chuyển đổi thiếu thông tin được thực hiện bằng quy tắc IDNA 2008Quản lý gói tài nguyên bên ngoài
Tùy thuộc vào ứng dụng của bạn, cơ chế lưu trữ tài nguyên của bạn có thể khác nhau, tuy nhiên, thư viện đi kèm với một dịch vụ tùy chọn cho phép phân giải tên miền mà không cần chi phí mạng liên tục tải xuống liên tục cơ sở dữ liệu từ xa
Các giao diện và lớp được xác định trong không gian tên
resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
4 cho phép tích hợp một hệ thống quản lý tài nguyên và cung cấp một ví dụ triển khai bằng cách sử dụng các giao diện PSR PHP-FIGSử dụng giao diện PHP-FIG
resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
5 cho phép trả về các phiên bản lưu trữ truy xuất, chuyển đổi và lưu trữ Danh sách hậu tố công khai và Danh sách tên miền cấp cao nhất IANA bằng các giao diện tiêu chuẩn do PHP-FIG xuất bảnĐể hoạt động như dự định, hàm tạo
resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
5 yêu cầu- thư viện triển khai Bộ đệm ẩn đơn giản PSR-16
- thư viện triển khai PSR-17 HTTP Factory
- thư viện triển khai Máy khách HTTP PSR-18
Khi tạo một phiên bản lưu trữ mới, bạn sẽ yêu cầu
- một đối số
7 để tùy ý thêm tiền tố vào chỉ mục bộ đệm của bạn, mặc định là chuỗi trống;resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[]; $newDomain = $domain ->withLabel[1, 'com'] //replace 'example' by 'com' ->withoutLabel[0, -1] //remove the first and last labels ->append['www'] ->prepend['docs.example']; echo $domain->toString[]; //display 'www.example.com' echo $newDomain->toString[]; //display 'docs.example.com.www' $newDomain->clear[]->labels[]; //return [] echo $domain->slice[2]->toString[]; //display 'www'
- một đối số
8 nếu bạn cần đặt mặc định làresolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[]; $newDomain = $domain ->withLabel[1, 'com'] //replace 'example' by 'com' ->withoutLabel[0, -1] //remove the first and last labels ->append['www'] ->prepend['docs.example']; echo $domain->toString[]; //display 'www.example.com' echo $newDomain->toString[]; //display 'docs.example.com.www' $newDomain->clear[]->labels[]; //return [] echo $domain->slice[2]->toString[]; //display 'www'
8, mặc định làresolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[]; $newDomain = $domain ->withLabel[1, 'com'] //replace 'example' by 'com' ->withoutLabel[0, -1] //remove the first and last labels ->append['www'] ->prepend['docs.example']; echo $domain->toString[]; //display 'www.example.com' echo $newDomain->toString[]; //display 'docs.example.com.www' $newDomain->clear[]->labels[]; //return [] echo $domain->slice[2]->toString[]; //display 'www'
1 để sử dụng TTL mặc định của bộ nhớ đệm cơ bản;// display // uk // co // bbc // www $publicSuffixDomain = $result->suffix[]->domain[]; $publicSuffixDomain->labels[]; // returns ['uk', 'co']
Đối số
resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
8 có thể là- một
2 đại diện cho thời gian tính bằng giây [xem PSR-16];use Pdp\Domain; $nullDomain = Domain::fromIDNA2008[null]; $nullDomain->value[]; // returns null; $nullDomain->toString[]; // returns ''; $emptyDomain = Domain::fromIDNA2008['']; $emptyDomain->value[]; // returns ''; $emptyDomain->toString[]; // returns '';
- đối tượng
3 [xem PSR-16];use Pdp\Domain; $nullDomain = Domain::fromIDNA2008[null]; $nullDomain->value[]; // returns null; $nullDomain->toString[]; // returns ''; $emptyDomain = Domain::fromIDNA2008['']; $emptyDomain->value[]; // returns ''; $emptyDomain->toString[]; // returns '';
- một đối tượng
4 đại diện cho ngày và thời gian khi mặt hàng đó hết hạn;use Pdp\Domain; $nullDomain = Domain::fromIDNA2008[null]; $nullDomain->value[]; // returns null; $nullDomain->toString[]; // returns ''; $emptyDomain = Domain::fromIDNA2008['']; $emptyDomain->value[]; // returns ''; $emptyDomain->toString[]; // returns '';
Gói này không cung cấp bất kỳ triển khai nào của các giao diện như vậy vì bạn có thể tìm thấy các triển khai mạnh mẽ và đã được thử nghiệm trên packagist
Làm mới tài nguyên bằng cách sử dụng các nhà máy được cung cấp
ĐÂY LÀ CÁCH SỬ DỤNG THƯ VIỆN ĐƯỢC ĐỀ XUẤT
Với mục đích của ví dụ này, chúng tôi sẽ sử dụng giải pháp hỗ trợ PSR của chúng tôi với
- Đánh lừa ứng dụng khách HTTP làm ứng dụng khách HTTP PSR-18 của chúng tôi;
- Gói Guzzle PSR-7 cung cấp cho các nhà máy tạo đối tượng PSR-7 bằng giao diện PSR-17;
- Thành phần bộ đệm Symfony là nhà cung cấp triển khai bộ đệm PSR-16 của chúng tôi;
Chúng tôi sẽ lưu trữ cả hai nguồn bên ngoài trong 24 giờ trong cơ sở dữ liệu PostgreSQL
Bạn có thể tự do sử dụng các thư viện/giải pháp/cài đặt khác miễn là chúng triển khai các giao diện PSR được yêu cầu
resolve[Domain::from2008['www.ExAmpLE.cOM']]->domain[];
$newDomain = $domain
->withLabel[1, 'com'] //replace 'example' by 'com'
->withoutLabel[0, -1] //remove the first and last labels
->append['www']
->prepend['docs.example'];
echo $domain->toString[]; //display 'www.example.com'
echo $newDomain->toString[]; //display 'docs.example.com.www'
$newDomain->clear[]->labels[]; //return []
echo $domain->slice[2]->toString[]; //display 'www'
1Đảm bảo điều chỉnh mã sau cho ứng dụng của riêng bạn. Mã sau đây là một ví dụ được đưa ra mà không có bảo đảm về việc nó hoạt động tốt
Bạn nên sử dụng vùng chứa tiêm phụ thuộc để tránh lặp lại mã này trong ứng dụng của mình
Cập nhật tự động
Điều quan trọng là luôn có Danh sách hậu tố công khai và Danh sách tên miền cấp cao nhất được cập nhật.
Thư viện này không còn cung cấp tập lệnh sẵn dùng để thực hiện điều đó vì việc triển khai công việc như vậy phụ thuộc rất nhiều vào thiết lập ứng dụng của bạn. Bạn có thể sử dụng tập lệnh ví dụ trên làm điểm bắt đầu để triển khai công việc đó.
Nhật ký thay đổi
Vui lòng xem CHANGELOG để biết thêm thông tin về những gì đã được thay đổi kể từ phiên bản 5. 0. 0 đã được phát hành
Đóng góp
Đóng góp được hoan nghênh và sẽ được ghi có đầy đủ. Vui lòng xem ĐÓNG GÓP để biết chi tiết
thử nghiệm
use Pdp\Domain;
$nullDomain = Domain::fromIDNA2008[null];
$nullDomain->value[]; // returns null;
$nullDomain->toString[]; // returns '';
$emptyDomain = Domain::fromIDNA2008[''];
$emptyDomain->value[]; // returns '';
$emptyDomain->toString[]; // returns '';
5 có- một bộ kiểm tra PHPUnit
- bộ kiểm tra tuân thủ phân tích mã bằng PHPStan
- bộ kiểm tra tuân thủ phân tích mã bằng Psalm
- bộ kiểm tra tuân thủ kiểu mã hóa bằng cách sử dụng PHP CS Fixer
Để chạy thử nghiệm, hãy chạy lệnh sau từ thư mục dự án
Bảo vệ
Nếu bạn phát hiện ra bất kỳ vấn đề nào liên quan đến bảo mật, vui lòng gửi email [email được bảo vệ] thay vì sử dụng trình theo dõi vấn đề
Tín dụng
Giấy phép
Giấy phép MIT [MIT]. Vui lòng xem Tệp giấy phép để biết thêm thông tin
Ghi công
Các phần của lớp
// display
// uk
// co
// bbc
// www
$publicSuffixDomain = $result->suffix[]->domain[];
$publicSuffixDomain->labels[]; // returns ['uk', 'co']
0 là các tác phẩm phái sinh của PHP-tên miền-libs đã đăng ký. Tôi đã đính kèm một bản sao của Giấy phép Nền tảng Phần mềm Apache 2. 0 trong dự án này