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

PHP – Cách phát hiện mã hóa ký tự với mb_detect_encoding()

Trong PHP, mb_detect_encoding() được dùng để phát hiện mã hóa ký tự. Nó có thể phát hiện mã hóa cho một chuỗi từ một danh sách có thứ tự các ứng viên. Hàm này được hỗ trợ từ PHP 4.0.6 trở lên.

mb_detect_encoding() hữu ích với mã hóa đa byte, nơi không phải mọi dãy byte đều tạo thành chuỗi hợp lệ. Nếu chuỗi đầu vào chứa dãy như vậy, mã hóa đó sẽ bị loại và kiểm tra mã hóa tiếp theo.

Cú pháp

string mb_detect_encoding(string $string, array|string $encoding = null, bool $strict = false)

Việc phát hiện tự động mã hóa ký tự không hoàn toàn đáng tin cậy nếu thiếu thông tin bổ sung. Có thể nói phát hiện mã hóa giống như giải mã chuỗi mã hóa không có khóa. Tiêu đề Content-Type HTTP có thể dùng để chỉ ra mã hóa ký tự được lưu trữ hoặc truyền cùng dữ liệu.

Tham số

Hàm mb_detect_encoding chấp nhận ba tham số:

  • $string – Chuỗi được kiểm tra.

  • $encoding – Danh sách mã hóa ký tự để thử theo thứ tự. Danh sách có thể là mảng chuỗi hoặc chuỗi đơn phân tách bằng dấu phẩy. Nếu encoding bị bỏ qua hoặc null, thứ tự phát hiện hiện tại được thiết lập bằng tùy chọn cấu hình mbstring.detect_order hoặc hàm mb_detect_order() sẽ được dùng.

  • $strict – Kiểm soát hành vi khi chuỗi không hợp lệ trong bất kỳ mã hóa nào liệt kê. Nếu strict là false, trả về mã hóa khớp gần nhất. Nếu strict là true, trả về false.

Giá trị trả về

Trả về mã hóa ký tự được phát hiện, hoặc false nếu chuỗi không hợp lệ trong bất kỳ mã hóa liệt kê nào.

Ví dụ 1 – Không dùng tham số strict

<?php
$string = "";
// Phát hiện mã hóa với detect_order hiện tại
echo mb_detect_encoding($string);
// auto mở rộng theo mbstring.language
echo mb_detect_encoding($string, "auto");
// Chỉ định mã hóa
echo mb_detect_encoding($string, "JIS, eucjp-win, sjis-win");
// Dùng mảng cho tham số "encodings"
$array_encoding = ["ASCII", "JIS", "EUC-JP"];
echo mb_detect_encoding($string, $array_encoding);
?>

Kết quả

ASCIIASCIIJISASCII

Ví dụ 2 – Sử dụng tham số strict

<?php
// 'áéóú' được mã hóa trong ISO-8859-1
$string = "\xE1\xE9\xF3\xFA";

// UTF-8 được coi là khớp gần hơn
var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], false));
var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], true));

// Tham số strict không thay đổi kết quả nếu tìm thấy mã hóa hợp lệ
var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8', 'ISO-8859-1'], false));
var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8', 'ISO-8859-1'], true));
?>

Kết quả

string(5) "UTF-8"
bool(false)
string(10) "ISO-8859-1"
string(10) "ISO-8859-1"