แปลง PHP Serialize ↔ JSON
อ่านค่า serialize() ที่เก็บในฐานข้อมูลให้เป็น JSON ที่คนอ่านรู้เรื่อง
ผลลัพธ์จะแสดงที่นี่รูปแบบ serialize() นับความยาวข้อความเป็นไบต์ ไม่ใช่จำนวนตัวอักษร ข้อความไทยหนึ่งตัวใช้ 3 ไบต์ เครื่องมือนี้จึงอ่านและเขียนตามไบต์อย่างถูกต้อง ต่างจากตัวแปลงที่นับตัวอักษรแล้วทำให้ข้อมูลเพี้ยน
แปลงในเบราว์เซอร์ของคุณทั้งหมด ข้อมูลไม่ถูกส่งขึ้นเซิร์ฟเวอร์
เกี่ยวกับเครื่องมือนี้
เครื่องมือ แปลง PHP Serialize ↔ JSON อ่านค่าที่ฟังก์ชัน serialize() ของ PHP สร้างขึ้น แล้วแสดงเป็น JSON ที่คนอ่านเข้าใจได้ และแปลงกลับได้ด้วย
สถานการณ์ที่คนเจอบ่อยที่สุดคือเปิดฐานข้อมูลแล้วพบคอลัมน์หน้าตาแบบ a:3:{s:4:"name";...} — ตาราง options ของ WordPress เต็มไปด้วยค่าแบบนี้ เช่นเดียวกับระบบ CMS เก่า ๆ ที่เขียนด้วย PHP ปกติต้องเปิด PHP ขึ้นมารันถึงจะอ่านออก ซึ่งเป็นเหตุผลที่เครื่องมือบนเบราว์เซอร์มีประโยชน์
จุดสำคัญที่สุดที่ทำให้เครื่องมือนี้ต่างจากตัวแปลงทั่วไปคือ การนับความยาวเป็นไบต์ รูปแบบ serialize() ระบุความยาวข้อความไว้ล่วงหน้า และนับเป็นไบต์เสมอ คำว่า "สวัสดี" มี 6 ตัวอักษรแต่กินพื้นที่ 18 ไบต์ ตัวแปลงที่ตัดข้อความตามจำนวนตัวอักษรจะได้ข้อความผิด แล้วทุกฟิลด์ที่ตามมาก็เลื่อนผิดตำแหน่งไปหมด ซึ่งกับข้อมูลภาษาไทยแปลว่าพังแทบทุกกรณี
ระบบยังรักษาความหมายของโครงสร้างไว้ด้วย — array ที่คีย์ไม่ได้เรียง 0, 1, 2 พอดีจะกลายเป็น object ไม่ใช่รายการ เพราะการยุบเป็นรายการจะทำให้คีย์หายไป
วิธีใช้งาน
- 1เลือกทิศทาง: serialize() → JSON หรือ JSON → serialize()
- 2วางค่าที่คัดลอกมาจากฐานข้อมูลลงในช่อง
- 3ผลลัพธ์จะแปลงให้ทันที ถ้ารูปแบบผิดจะบอกตำแหน่งที่มีปัญหา
- 4กดสลับเพื่อส่งผลลัพธ์กลับไปเป็นข้อมูลเข้าและแปลงกลับได้ทันที
คำถามที่พบบ่อย
- ค่าแบบ a:2:{...} นี้คืออะไร
- เป็นผลลัพธ์จากฟังก์ชัน serialize() ของ PHP ซึ่งแปลง array หรือ object ให้เป็นข้อความเพื่อเก็บลงฐานข้อมูล พบบ่อยมากในตาราง options ของ WordPress และในระบบเก่าที่เขียนด้วย PHP
- ทำไมข้อความไทยถึงเพี้ยนเวลาใช้เครื่องมืออื่น
- เพราะรูปแบบนี้ระบุความยาวข้อความเป็นไบต์ ไม่ใช่จำนวนตัวอักษร คำว่า สวัสดี มี 6 ตัวอักษรแต่ 18 ไบต์ เครื่องมือที่นับตัวอักษรจะตัดข้อความผิดตำแหน่ง แล้วทำให้ทุกฟิลด์ที่ตามมาเพี้ยนตามไปด้วย
- รองรับ object ของ PHP ไหม
- รองรับ ค่าแบบ O:4:"User":... จะถูกแปลงเป็น object ธรรมดาโดยเก็บชื่อคลาสไว้ในฟิลด์ __class เพราะ JSON ไม่มีแนวคิดเรื่องคลาส
- ทำไมบาง array กลายเป็น object แทนที่จะเป็นรายการ
- เพราะ array ของ PHP เป็นแผนที่แบบมีลำดับ ถ้าคีย์ไม่ใช่ 0, 1, 2 เรียงกันพอดี การแปลงเป็นรายการของ JSON จะทำให้คีย์หายไป ระบบจึงเก็บเป็น object แทนเพื่อไม่ให้ข้อมูลสูญ
- ปลอดภัยไหมถ้าวางข้อมูลจริงจากฐานข้อมูล
- ปลอดภัย การแปลงทั้งหมดทำในเบราว์เซอร์ของคุณ ไม่มีการส่งข้อมูลออกไปที่ใด