ENCODEURL แปลงข้อความธรรมชาติเป็น URL-encoded string โดยแทนที่อักขระพิเศษ (เช่น ช่องว่าง สัญลักษณ์พิเศษ) ด้วยรหัสเลขฐานสิบหก ทำให้ข้อความปลอดภัยสำหรับใช้ในการขอ URL โดยมักใช้ร่วมกับ WEBSERVICE และ FILTERXML ในการค้นหาข้อมูลจากเว็บ API
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| text | text | ข้อความหรือเซลล์ที่ต้องการแปลงเป็น URL-encoded string โดยอักขระพิเศษจะถูกแทนที่ด้วย % ตามด้วยเลขฐานสิบหก |
ENCODEURL เป็นฟังก์ชันที่ใช้แปลงข้อความทั่วไปเป็น URL-encoded string ตามมาตรฐาน RFC 3986 โดยเก็บเฉพาะตัวอักษร A-Z, a-z, ตัวเลข 0-9 และอักขระ – _ . ~ ไว้เหมือนเดิม ส่วนอักขระอื่นทุกตัว (ช่องว่าง, , & / % ! ภาษาไทย ฯลฯ) จะถูกแทนที่ด้วย % ตามด้วยเลขฐานสิบหก
ที่ต้องระวังคือ ข้อความที่ไม่ใช่ ASCII เช่นภาษาไทย จะถูกแปลงเป็น UTF-8 ก่อนแล้วค่อยเข้ารหัสทีละไบต์ ทำให้ 1 ตัวอักษรไทยกลายเป็นรหัส %XX ต่อกัน 3 ชุด (เพราะภาษาไทยใช้ 3 ไบต์ต่อตัวอักษรใน UTF-8) ผลลัพธ์จึงยาวกว่าข้อความอังกฤษมาก และถ้าลืมเข้ารหัสอักขระอย่าง & หรือ = ที่เป็นตัวคั่นพารามิเตอร์ใน URL คำขอไปยัง web service จะพังหรือตีความพารามิเตอร์ผิดตัวทันที
ส่วนตัวผม ใช้ ENCODEURL แทบทุกครั้งที่ต้องต่อ URL แบบไดนามิกจากค่าในเซลล์ก่อนส่งเข้า WEBSERVICE เพราะข้อมูลจริงมักมีช่องว่าง เครื่องหมายจุลภาค หรือภาษาไทยปนอยู่ ถ้าไม่เข้ารหัสก่อน คำขอจะพังแบบเงียบๆ โดยไม่มี error ชัดเจนบอกว่าปัญหาอยู่ตรงไหน
ใช้ ENCODEURL เพื่อเข้ารหัสรหัสหุ้น (เช่น AAPL) ก่อนส่งไปยัง web service เพื่อดึงข้อมูลราคาปัจจุบัน
เข้ารหัส URL สำหรับข้อความค้นหาที่มีช่องว่างหรืออักขระพิเศษ เช่น 'Excel Tips & Tricks' เพื่อส่งไปยัง WEBSERVICE
รวม ENCODEURL กับ WEBSERVICE เพื่อสร้าง URL ที่ปลอดภัยจากข้อมูลในเซลล์ โดยอักขระที่ไม่ปลอดภัยสำหรับ URL จะถูกเข้ารหัสอย่างถูกต้อง
สูตรนี้แปลงข้อความ 'Profit and Loss Statement.xlsx' โดยแทนที่ช่องว่างสองตำแหน่งด้วย %20 (รหัสเลขฐานสิบหกของช่องว่าง) ผลลัพธ์คือ URL-encoded string ที่ปลอดภัยสำหรับใช้ในการขอ URL
สูตรนี้อ้างอิงเซลล์ C2 ที่มีรหัสหุ้น MSFT และเข้ารหัสเพื่อให้ปลอดภัยในการส่งไปยัง web service ในกรณีนี้ MSFT ไม่มีอักขระพิเศษ จึงไม่มีการเปลี่ยนแปลง
สูตรนี้รวมฟังก์ชัน 3 ตัว โดย ENCODEURL ที่ C2 ขั้นแรกแปลงรหัสหุ้นให้ปลอดภัยสำหรับ URL จากนั้น WEBSERVICE ส่งคำขอไปยัง web service เพื่อดึงข้อมูล XML ของราคา สุดท้าย FILTERXML ดึงราคาล่าสุด (LastPrice) จากผลลัพธ์ XML โดยใช้ XPath expression
"กาแฟ" มี 3 ตัวอักษรไทย แต่ละตัวใช้ 3 ไบต์ใน UTF-8 จึงได้รหัส %XX ทั้งหมด 9 ชุด (3 ตัวอักษร × 3 ไบต์) ถ้าส่งคำค้นภาษาไทยเข้า URL โดยไม่เข้ารหัสก่อน web service ส่วนใหญ่จะตีความ URL ผิดหรือคืน error ทันที เพราะ URL มาตรฐานรับได้แค่ตัวอักษร ASCII
ข้อความนี้มีทั้ง , (comma) และ & (ampersand) ซึ่ง & คือตัวคั่นพารามิเตอร์มาตรฐานของ URL query string ถ้าไม่เข้ารหัสก่อน แล้วเผลอต่อข้อความนี้เป็นค่าพารามิเตอร์ตัวหนึ่งใน URL, web service จะเข้าใจผิดว่ามีการเริ่มพารามิเตอร์ใหม่ตรงตำแหน่ง & ทำให้ค่าที่ส่งไปขาดหายหรือคำขอทั้งชุดพัง ENCODEURL แปลง & เป็น %26 และ , เป็น %2C ให้อัตโนมัติ ทำให้ข้อความทั้งก้อนถูกส่งไปเป็นค่าเดียวอย่างปลอดภัย
เพราะข้อมูลบางอย่าง เช่น ชื่อสินค้า ที่มีช่องว่างหรืออักขระพิเศษ ไม่ปลอดภัยในการส่งผ่าน URL โดยตรง ENCODEURL จะแปลงอักขระเหล่านั้นเป็นรหัส URL ที่ถูกต้อง ทำให้ web service สามารถตีความข้อมูลได้อย่างถูกต้อง
ENCODEURL เป็นฟังก์ชันเข้ารหัส ทำหน้าที่แปลงข้อความให้ปลอดภัยสำหรับ URL เท่านั้น ส่วน WEBSERVICE เป็นฟังก์ชันที่ส่งคำขอไปยัง web service จริง ๆ โดยมักใช้ร่วมกันคือ ENCODEURL เตรียมข้อมูล และ WEBSERVICE ส่งคำขอ
ได้ ENCODEURL สามารถใช้ได้ทุกครั้งที่ต้องการแปลงข้อความให้เป็น URL-encoded string เช่น ในการสร้าง hyperlink หรือการเชื่อมต่อไปยัง API อื่น ๆ
ฟังก์ชันนี้เข้ารหัสทุกตัวอักษรที่ไม่ใช่ A-Z, a-z, 0-9 และ – _ . ~ ด้วยสัญลักษณ์เปอร์เซ็นต์ (%) ตามด้วยเลขฐานสิบหก ตัวอย่างเช่น ช่องว่าง = %20 เครื่องหมายอัศเจรีย์ (!) = %21 เครื่องหมายจุลภาค (,) = %2C เครื่องหมาย & = %26 ลักษณะนี้เรียกว่า URL encoding หรือ percent-encoding ตามมาตรฐาน RFC 3986
เพราะ ENCODEURL แปลงข้อความเป็น UTF-8 ก่อนเข้ารหัส และภาษาไทยแต่ละตัวอักษรใช้ 3 ไบต์ใน UTF-8 (ตัวอักษรละ 1 รหัส %XX ต่อไบต์ รวม 3 ชุดต่อตัวอักษร) ต่างจากภาษาอังกฤษที่ใช้ไบต์เดียว จึงทำให้ข้อความไทยเข้ารหัสแล้วยาวกว่าอังกฤษ 3-9 เท่าตามความยาวเดิม
ฟังก์ชันที่ผู้เขียนโยงไว้กับ ENCODEURL จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
FILTERXML ดึงข้อมูลเฉพาะส่วนจาก XML content โดยใช้ XPath expression เพื่อระบุตำแหน่งของข้อมูลที่ต้องการ ทำให้ง่ายในการแยกข้อมูลที่เป็นประโยชน์จากผลลัพธ์ XML ที่ส่งกลับมาจาก WEBSERVICE มักใช้ร่วมกับ WEBSERVICE และ ENCODEURL เพื่อดึงข้อมูลจาก web API
WEBSERVICE ส่งคำขอ GET ไปยัง URL ของ web service (API) บนอินเทอร์เน็ตหรือ Intranet และส่งกลับข้อมูลที่ได้รับ ใช้เพื่อดึงข้อมูลแบบ real-time เช่น ราคาหุ้น อัตราแลกเปลี่ยน ข้อมูลสภาพอากาศ โดยปกติใช้ร่วมกับ FILTERXML เพื่อแยกข้อมูลที่ต้องการจากผลลัพธ์ XML และกับ ENCODEURL เพื่อเข้ารหัส URL ให้ปลอดภัย
TEXTJOIN รวมข้อความจากหลายเซลล์หรือทั้งช่วงเป็นข้อความเดียว โดยกำหนดตัวคั่นเองได้และสั่งข้ามเซลล์ว่างได้ในคำสั่งเดียว ต่างจาก CONCATENATE ที่ต้องพิมพ์ตัวคั่นและเชื่อมทีละเซลล์เอง งานที่ใช้บ่อยคือรวมที่อยู่หลายบรรทัด สร้างลิสต์คั่นด้วยคอมม่าไว้ส่งออก หรือรวมผลลัพธ์จาก FILTER ให้ออกมาเป็นข้อความเดียว
ส่งกลับตัวอักษร Unicode จากรหัสตัวเลข ใช้สร้างสัญลักษณ์พิเศษ emoji และตัวอักษรจากหลากหลายภาษา
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่