Trình phân tích tên miền php của Jeremykendall

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

Trình phân tích tên miền php của Jeremykendall
Trình phân tích tên miền php của Jeremykendall
Trình phân tích tên miền php của Jeremykendall
Trình phân tích tên miền php của Jeremykendall

Độ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
    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

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ỗi

use 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']
2

Mặ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

  • // display 
    // uk
    // co
    // bbc
    // www
    
    $publicSuffixDomain = $result->suffix()->domain();
    $publicSuffixDomain->labels(); // returns ['uk', 'co']
    9
  • 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'
    0

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ông

Sau 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']
8

TIỀ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 2008

Quả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-FIG

Sử 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ố
    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'
    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;
  • một đố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 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à
    // display 
    // uk
    // co
    // bbc
    // www
    
    $publicSuffixDomain = $result->suffix()->domain();
    $publicSuffixDomain->labels(); // returns ['uk', 'co']
    1 để sử dụng TTL mặc định của bộ nhớ đệm cơ bản;

Đố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
    use Pdp\Domain;
    
    $nullDomain = Domain::fromIDNA2008(null);
    $nullDomain->value();    // returns null;
    $nullDomain->toString(); // returns '';
    
    $emptyDomain = Domain::fromIDNA2008('');
    $emptyDomain->value();    // returns '';
    $emptyDomain->toString(); // returns '';
    2 đại diện cho thời gian tính bằng giây (xem PSR-16);
  • đối tượng
    use Pdp\Domain;
    
    $nullDomain = Domain::fromIDNA2008(null);
    $nullDomain->value();    // returns null;
    $nullDomain->toString(); // returns '';
    
    $emptyDomain = Domain::fromIDNA2008('');
    $emptyDomain->value();    // returns '';
    $emptyDomain->toString(); // returns '';
    3 (xem PSR-16);
  • một đối tượng
    use Pdp\Domain;
    
    $nullDomain = Domain::fromIDNA2008(null);
    $nullDomain->value();    // returns null;
    $nullDomain->toString(); // returns '';
    
    $emptyDomain = Domain::fromIDNA2008('');
    $emptyDomain->value();    // returns '';
    $emptyDomain->toString(); // returns '';
    4 đại diện cho ngày và thời gian khi mặt hàng đó hết hạn;

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