Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP – ตรวจจับ Character Encoding ด้วย mb_detect_encoding()

ฟังก์ชัน 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"