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

PHP – วิธีตรวจจับการเข้ารหัสอักขระโดยใช้ mb_detect_encoding()


ใน PHP mb_detect_encoding() ใช้สำหรับตรวจจับการเข้ารหัสอักขระ สามารถตรวจจับการเข้ารหัสอักขระสำหรับสตริงจากรายการตัวเลือกที่เรียงลำดับได้ ฟังก์ชันนี้รองรับในเวอร์ชัน PHP 4.0.6 หรือสูงกว่า

mb_detect_encoding() มีประโยชน์ในการเข้ารหัสแบบหลายไบต์ โดยที่ลำดับของไบต์ไม่ได้ทั้งหมดจะสร้างสตริงที่ถูกต้อง หากสตริงอินพุตมีประเภทของลำดับดังกล่าว การเข้ารหัสนั้นจะถูกปฏิเสธและจะตรวจสอบการเข้ารหัสถัดไป

ไวยากรณ์

string mb_detect_encoding(str $string, str $encoding, bool $strcit)

การตรวจจับการเข้ารหัสอักขระอัตโนมัติไม่น่าเชื่อถือโดยสิ้นเชิงหากไม่มีข้อมูลเพิ่มเติม เราสามารถพูดได้ว่าการตรวจจับการเข้ารหัสอักขระคล้ายกับการถอดรหัสสตริงที่เข้ารหัสโดยไม่มีคีย์ ประเภทเนื้อหา HTTP ส่วนหัวสามารถใช้เป็นตัวบ่งชี้การเข้ารหัสอักขระที่จัดเก็บหรือส่งไปกับข้อมูลได้

พารามิเตอร์

mb_detect_encoding ฟังก์ชั่นยอมรับสามพารามิเตอร์ -

  • $string − พารามิเตอร์นี้ใช้สำหรับสตริงที่กำลังตรวจสอบ

  • $encoding − พารามิเตอร์นี้ใช้สำหรับรายการการเข้ารหัสอักขระเพื่อลองตามลำดับ รายการอาจระบุในรูปแบบใดก็ได้ เช่น อาร์เรย์ของสตริงหรือสตริงเดียวที่คั่นด้วยเครื่องหมายจุลภาค ในกรณีที่การเข้ารหัสถูกละเว้นหรือเป็นโมฆะ ดังนั้น detect_order ปัจจุบันจะถูกตั้งค่าด้วย mbstring.detect_order ตัวเลือกการกำหนดค่าหรือ mb_detect_order() จะถูกใช้งาน

  • $เข้มงวด − พารามิเตอร์นี้ใช้เพื่อควบคุมพฤติกรรมเมื่อสตริงไม่ถูกต้องในการเข้ารหัสใดๆ ที่ระบุไว้ หากการเข้มงวดถูกตั้งค่าเป็นเท็จ ก็จะส่งคืนการเข้ารหัสที่ตรงกันที่ใกล้เคียงที่สุด หากการเข้มงวดถูกตั้งค่าเป็น true มันจะคืนค่าเท็จ

คืนค่า

ส่งคืนการเข้ารหัสอักขระที่ตรวจพบ หรือคืนค่า False หากสตริงไม่ถูกต้องในการเข้ารหัสใดๆ ที่ระบุไว้

ตัวอย่างที่ 1

mb_detect_encoding() ฟังก์ชันที่ไม่มีพารามิเตอร์ที่เข้มงวด

<?php
   $string="";
   // It detect char encoding with current detect_order
   echo mb_detect_encoding($string);

   // auto is expanded according to mbstring.language
   echo mb_detect_encoding($string, "auto");

   // Specify encodings
   echo mb_detect_encoding($string, "JIS, eucjp-win, sjis-win");

   // Use array to specify "encodings" parameter
   $array_encoding = [
      "ASCII",
      "JIS",
      "EUC-JP"
   ];
   echo mb_detect_encoding($string, $array_encoding);
?>

ผลลัพธ์

ASCIIASCIIJISASCII

ตัวอย่างที่ 2

ฟังก์ชัน mb_detect_encoding() โดยใช้พารามิเตอร์ที่เข้มงวด

<?php
   // 'áéóú' encoded in ISO-8859-1
   $string = "\xxE11\xE9\xF3\xxFA";

   // UTF-8 is considered a closer match
   var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], false));
   var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], true));

   //strict parameter does not change the result, if it finds a valid 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"