แก้ปัญหา Web Service กับภาษาไทยกับ URL Encode/Decode
Developer หลายคนน่าจะเคยประสบปัญหาเรียก Web Service ส่งภาษาไทยไปแล้ว ทำไมค่าเพี้ยนบ้าง หรือจะรับค่ามา ทำไมเป็นตัว %C2%A3%E2%82%AC
แนวนี้ตลอดเลย จะแก้ปัญหายังไงดี ?? วันนี้ผมก็เอาใจคนใช้ PHP กับ Javascript กันครับ (เพราะผมศึกษา 2 ตัวนี้เป็นหลักนะครับ) ถ้าสำหรับ PHP แล้วการแก้ปัญหาก็คือ
- ก่อนส่ง Parameter ไปให้ทำการใช้ function rawurlencode(string $str) ก่อนแล้วการส่งภาษาไทยไปก็จะถูกต้อง
- สำหรับการรับ Parameter จะขึ้นอยู่กับคนทำ Web Service เช่นถ้าเป็น Google เราได้ผลลัพธ์เป็นแนวนี้ %C2%A3%E2%82%AC (แต่จริงๆคือมันเป็นภาษาไทย) เราก็ต้องมาทำการ rawurldecode(string $str) มาเป็นตัวแก้เหมือนกัน
- ข้อแนะนำพิเศษสำหรับ OOP ที่มีการส่งค่าไปๆมาๆบ่อยอาจเกิดการ rawurldecode เปลี่ยนแปลงได้ดังนั้นต้องระวังดีๆนะครับ
ส่วนใครใช้ Javascript แล้วละก็เราต้องไปหา function ที่ชื่อว่า encodeURI กับ decodeURI ไม่ใช่ L นะครับเป็นตัว i (ยูอาไอ) เสร็จวิธีการใช้ก็ใส่ String เข้าไปเหมือนเดิมครับ โอ้วโหวง่ายไหมครับ
เส้นผมบังภูเขา แถมอีกนิดสำหรับสมัยนี้แล้ว Data ส่วนใหญ่ใน Web Service มักจะเป็น XML กับ JSON (ส่วนตัวผมชอบ JSON นะ) โดยถ้า JSON สำหรับ PHP แล้วนั้นผมมี function มาให้รู้จักกันอีกนั้นคือ json นั้นคือ json_decode() กับ json_encode()
แต่ผมเตือนนิดหน่อยคือ json_decode() นั้นไม่สามารถใช้กับ element ที่มาความลึกถึง 127 ชั้นได้ (ไม่ใช่มีชั้นเดียวแล้ว 127 data อันนั้นได้อยู่) วันนี้มาแนว Coding นิดหน่อยแต่หวังว่าคงมีประโยชน์สำหรับคนที่กำลังหัดหรือใช้ Web Service กันนะครับ
เนื้อหาคล้ายกันที่น่าสนใจ
