ฟังก์ชัน mb_detect_encoding() ใช้ตรวจจับ character encoding ของสตริงจากรายการ candidates ที่เรียงลำดับ รองรับตั้งแต่ PHP 4.0.6 ขึ้นไป ฟังก์ชันนี้มีประโยชน์กับ multibyte encoding ที่ byte sequence บางส่วนอาจไม่ถูกต้อง หากพบ sequence ไม่ถูกต้อง จะปฏิเสธ encoding นั้นและลอง encoding ถัดไป
รูปแบบการใช้งาน (Syntax)
string mb_detect_encoding(string $string, array|string $encoding = null, bool $strict = false)
การตรวจจับ encoding อัตโนมัติไม่เชื่อถือได้ 100% โดยไม่มีข้อมูลเพิ่มเติม คล้ายกับการถอดรหัสข้อความเข้ารหัสโดยไม่มี key สามารถใช้ Content-Type HTTP header ช่วยระบุ encoding ได้
พารามิเตอร์
- $string – สตริงที่ต้องการตรวจสอบ
- $encoding – รายการ encoding ที่จะลอง ตามลำดับ สามารถเป็น array หรือ string คั่นด้วย comma หากละเว้น จะใช้ detect_order จากการตั้งค่า mbstring.detect_order หรือ mb_detect_order()
- $strict – ควบคุมพฤติกรรมเมื่อสตริงไม่ถูกต้องใน encoding ใดๆ ในรายการ:
- false (ค่าเริ่มต้น) – คืนค่า encoding ที่ใกล้เคียงที่สุด
- true – คืนค่า false
ค่าที่คืนกลับ
คืนค่า character encoding ที่ตรวจพบ หรือ false หากไม่ผ่าน encoding ใดๆ ในรายการ
ตัวอย่าง 1: ไม่ใช้ strict parameter
<?php $string = ""; echo mb_detect_encoding($string); // ใช้ detect_order ปัจจุบัน echo mb_detect_encoding($string, "auto"); // auto ตาม mbstring.language echo mb_detect_encoding($string, "JIS, eucjp-win, sjis-win"); // ระบุ encoding $array_encoding = ["ASCII", "JIS", "EUC-JP"]; echo mb_detect_encoding($string, $array_encoding); // ใช้ array ?>
ผลลัพธ์
ASCIIASCIIJISASCII
ตัวอย่าง 2: ใช้ strict parameter
<?php // 'áéóú' เข้ารหัสใน ISO-8859-1 $string = "\xE1\xE9\xF3\xFA"; // UTF-8 ถือว่าใกล้เคียงกว่า var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], false)); var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], true)); // strict ไม่เปลี่ยนผลถ้าพบ encoding ที่ถูกต้อง 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)); ?>
ผลลัพธ์
string(5) "UTF-8" bool(false) string(10) "ISO-8859-1" string(10) "ISO-8859-1"