Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

Hàm idn_to_ascii() trong PHP

Hàm idn_to_ascii() trong PHP chuyển đổi tên miền Unicode sang dạng IDNA ASCII. IDNA = Internationalizing Domain Names in Applications – cơ chế xử lý tên miền quốc tế chứa ký tự non-ASCII.

Cú pháp

string idn_to_ascii(
    string $domain,
    int $flags = IDNA_DEFAULT,
    int $variant = INTL_IDNA_VARIANT_UTS46,
    array &$idna_info = null
)

Tham số

Tham số Mô tả
$domain Tên miền cần chuyển đổi. Phải là UTF-8.
$flags Kết hợp các hằng IDNA_* (ví dụ: IDNA_NONTRANSITIONAL_TO_ASCII, IDNA_CHECK_BIDI).
$variant INTL_IDNA_VARIANT_2003 (IDNA 2003, deprecated) hoặc INTL_IDNA_VARIANT_UTS46 (UTS#46, khuyên dùng).
$idna_info Chỉ dùng khi $variant = INTL_IDNA_VARIANT_UTS46. Trả về mảng info: result, is_transitional_different, errors.

Giá trị trả về

Tên miền dạng ASCII-compatible (A-label, dạng xn--...) nếu thành công, false nếu thất bại.

Ví dụ 1: Chuyển đổi cơ bản

<?php
echo idn_to_ascii('täst.de', 0);
// Output: xn--tst-qla.de
?>

Ví dụ 2: UTF-8 encoding & trường hợp đặc biệt

<?php
// Chuyển đổi từ UTF-8
echo idn_to_ascii(utf8_encode('täst.de'));
// Output: xn--tst-qla.de

// Tên miền đã là A-label (bắt đầu xn--) chứa non-ASCII → không chuyển được
$ascii = idn_to_ascii("xn--" . chr(0xC3) . chr(0xA4));
print_r($ascii);
// Output: xn--tst-fea82a.de (hoặc false tùy phiên bản ICU)
?>

Lưu ý

  • Cần extension intl (ICU).
  • PHP 7.2+ khuyên dùng INTL_IDNA_VARIANT_UTS46 (mặc định).
  • IDNA 2003 (INTL_IDNA_VARIANT_2003) đã deprecated từ PHP 7.2, xóa từ PHP 8.0.