Nếu bạn muốn xóa phần của miền được quản trị viên đăng ký tên miền quản trị, bạn sẽ cần sử dụng danh sách các hậu tố như vậy the Public Suffix List.
Nhưng kể từ dạo qua danh sách này và thử nghiệm các hậu tố vào tên miền mà không phải là hiệu quả, chứ không phải sử dụng danh sách này chỉ để xây dựng một chỉ số như thế này:
$tlds = array(
// ac : http://en.wikipedia.org/wiki/.ac
'ac',
'com.ac',
'edu.ac',
'gov.ac',
'net.ac',
'mil.ac',
'org.ac',
// ad : http://en.wikipedia.org/wiki/.ad
'ad',
'nom.ad',
// …
);
$tldIndex = array_flip($tlds);
Tìm kiếm phù hợp nhất sau đó sẽ đi như thế này:
$levels = explode('.', $domain);
for ($length=1, $n=count($levels); $length<=$n; ++$length) {
$suffix = implode('.', array_slice($levels, -$length));
if (!isset($tldIndex[$suffix])) {
$length--;
break;
}
}
$suffix = implode('.', array_slice($levels, -$length));
$prefix = substr($domain, 0, -strlen($suffix) - 1);
Hoặc xây dựng một cây đại diện cho hệ thống cấp bậc của các cấp tên miền như sau:
$tldTree = array(
// ac : http://en.wikipedia.org/wiki/.ac
'ac' => array(
'com' => true,
'edu' => true,
'gov' => true,
'net' => true,
'mil' => true,
'org' => true,
),
// ad : http://en.wikipedia.org/wiki/.ad
'ad' => array(
'nom' => true,
),
// …
);
Sau đó, bạn có thể sử dụng sau đây để tìm trận đấu:
$levels = explode('.', $domain);
$r = &$tldTree;
$length = 0;
foreach (array_reverse($levels) as $level) {
if (isset($r[$level])) {
$r = &$r[$level];
$length++;
} else {
break;
}
}
$suffix = implode('.', array_slice($levels, - $length));
$prefix = substr($domain, 0, -strlen($suffix) - 1);
Phần nào nên www.Google.co.uk trở lại? – Matthew