การเข้ารหัส URL

อักขระบางตัวไม่สามารถเป็นส่วนหนึ่งของ URL (เช่น การเว้นวรรค) และอักขระอื่นๆ จะมีความหมายพิเศษใน URL ในแบบฟอร์ม HTML ระบบจะใช้อักขระ = เพื่อแยกชื่อออกจากค่า ไวยากรณ์ทั่วไป URI ใช้การเข้ารหัส URL เพื่อจัดการกับปัญหานี้ ในขณะที่แบบฟอร์ม HTML จะใช้การแทนที่เพิ่มเติมบางส่วนแทนที่จะใช้การเข้ารหัสเปอร์เซ็นต์สำหรับอักขระดังกล่าวทั้งหมด

ตัวอย่างเช่น การเว้นวรรคในสตริงมีการเข้ารหัสด้วย %20 หรือแทนที่ด้วยเครื่องหมายบวก (+) หากคุณใช้อักขระไปป์ (|) เป็นตัวคั่น โปรดเข้ารหัสไปป์เป็น %7C คอมมาในสตริงควรเข้ารหัสเป็น %2C

เราขอแนะนำให้คุณใช้ไลบรารีการสร้าง URL ปกติของแพลตฟอร์มเพื่อเข้ารหัส URL โดยอัตโนมัติ เพื่อให้มั่นใจว่า URL ได้รับการ Escape สำหรับแพลตฟอร์มของคุณอย่างเหมาะสม

การสร้าง URL ที่ถูกต้อง

คุณอาจคิดว่า URL ที่ "ถูกต้อง" นั้นชัดเจนในตัวเอง แต่นั่นก็ไม่เชิง ตัวอย่างเช่น URL ที่ป้อนภายในแถบที่อยู่ในเบราว์เซอร์อาจมีอักขระพิเศษ (เช่น "上海+中國") เบราว์เซอร์ต้องแปลอักขระเหล่านั้นเป็นการภายในเป็นการเข้ารหัสอื่นก่อนที่จะส่ง เมื่อใช้โทเค็นเดียวกัน โค้ดที่สร้างหรือยอมรับอินพุต UTF-8 อาจถือว่า URL ที่มีอักขระ UTF-8 เป็นแบบ "ถูกต้อง" แต่ก็จะต้องแปลอักขระเหล่านั้นก่อนที่จะส่งไปยังเว็บเซิร์ฟเวอร์ด้วย กระบวนการนี้เรียกว่า การเข้ารหัส URL หรือการเข้ารหัสด้วยเปอร์เซ็นต์

สัญลักษณ์พิเศษ

เราจำเป็นต้องแปลสัญลักษณ์พิเศษเนื่องจาก URL ทั้งหมดต้องสอดคล้องกับไวยากรณ์ที่ระบุโดยข้อกำหนดของ Uniform Resource Identifier (URI) ซึ่งหมายความว่า URL ต้องมีเฉพาะชุดย่อยพิเศษของอักขระ ASCII ได้แก่ สัญลักษณ์ที่เป็นตัวอักษรและตัวเลขคละกันที่คุ้นเคย และอักขระที่สงวนไว้บางตัวเพื่อใช้เป็นอักขระควบคุมภายใน URL ตารางนี้สรุปอักขระเหล่านี้

สรุปอักขระของ URL ที่ถูกต้อง
ตั้งค่าตัวละครการใช้ URL
ตัวอักษรและตัวเลข ก ข ค ด ข อ ก ข อ ก ไ ม้ แ ห น ข อ ก ไ ม้ แ ห บ ข อ ก ไ ม้ สตริงข้อความ การใช้รูปแบบ (http), พอร์ต (8080) ฯลฯ
ไม่ได้จอง - _ ~ สตริงข้อความ
จองแล้ว ! * ' ( ) ; : @ & = + $ , / ? % # [ ] อักขระควบคุมและ/หรือสตริงข้อความ

เมื่อสร้าง URL ที่ถูกต้อง คุณต้องตรวจสอบว่า URL ดังกล่าวมีเฉพาะอักขระที่แสดงในตารางสรุปอักขระของ URL ที่ถูกต้องเท่านั้น การจัดรูปแบบ URL เพื่อใช้อักขระชุดนี้มักจะนำไปสู่ปัญหา 2 ประการ ได้แก่ การละเลยและการใช้แทนที่ 1 ข้อ

  • อักขระที่คุณต้องการจัดการอยู่นอกชุดข้างต้น ตัวอย่างเช่น อักขระในภาษาต่างประเทศอย่าง 上海+中國 ต้องเข้ารหัสโดยใช้อักขระข้างต้น ตามรูปแบบที่นิยมใช้กัน การเว้นวรรค (ซึ่งไม่อนุญาตให้ใช้ภายใน URL) มักจะแสดงโดยใช้อักขระบวก '+' เช่นกัน
  • อักขระจะอยู่ในชุดด้านบนเป็นอักขระที่สงวนไว้ แต่ต้องใช้อย่างตรงตัว เช่น ? จะใช้ภายใน URL เพื่อระบุจุดเริ่มต้นของสตริงคำค้นหา หากต้องการใช้สตริง "? และ Mysterions" คุณจะต้องเข้ารหัสอักขระ '?'

อักขระทั้งหมดที่จะเข้ารหัส URL จะได้รับการเข้ารหัสโดยใช้อักขระ '%' และค่าฐานสิบหก 2 ตัวที่สอดคล้องกับอักขระ UTF-8 ตัวอย่างเช่น 上海+中國 ใน UTF-8 จะเข้ารหัส URL เป็น %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B สตริง ? and the Mysterians จะเข้ารหัส URL เป็น %3F+and+the+Mysterians หรือ %3F%20and%20the%20Mysterians

อักขระทั่วไปที่ต้องมีการเข้ารหัส

อักขระทั่วไปที่ต้องเข้ารหัสมีดังนี้

อักขระที่ไม่ปลอดภัย ค่าที่เข้ารหัส
พื้นที่ %20
" %22
< %3C
> %3E
# %23
% %25
| %7C

บางครั้งการแปลง URL ที่คุณได้รับจากอินพุตของผู้ใช้อาจเป็นเรื่องยุ่งยาก ตัวอย่างเช่น ผู้ใช้สามารถป้อนที่อยู่เป็น "5th&Main St." โดยทั่วไป คุณควรสร้าง URL ของคุณจากส่วนของ URL นั้น โดยปฏิบัติต่อข้อมูลจากผู้ใช้เหมือนเป็นอักขระตามตัวอักษร

นอกจากนี้ URL ยังมีอักขระได้ไม่เกิน 1,6,384 ตัวสำหรับบริการเว็บ Google Maps Platform และ API เว็บแบบคงที่ทั้งหมด สำหรับบริการส่วนใหญ่ แทบจะไม่มีการจำกัดจำนวนอักขระสูงสุดนี้ อย่างไรก็ตาม โปรดทราบว่าบริการบางอย่างมีพารามิเตอร์หลายรายการที่อาจส่งผลให้ URL ยาว