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

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

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

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

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

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

อักขระพิเศษ

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

สรุปอักขระ URL ที่ถูกต้อง
ตั้งค่าอักขระการใช้ URL
ตัวอักษรและตัวเลขคละกัน a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 สตริงข้อความ, การใช้สคีมา (http), พอร์ต (8080) ฯลฯ
ไม่ได้จอง - _ . ~ สตริงข้อความ
จองแล้ว ! * ' ( ) ; : @ & = + $ , / ? % # [ ] อักขระควบคุมและ/หรือสตริงข้อความ

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

  • อักขระที่คุณต้องการจัดการอยู่นอกชุดอักขระข้างต้น ตัวอย่างเช่น อักขระในภาษาต่างประเทศ เช่น 上海+中國 ต้องเข้ารหัสโดยใช้อักขระข้างต้น นอกจากนี้ ตามธรรมเนียมที่นิยมใช้กัน ช่องว่าง (ซึ่ง ไม่อนุญาตให้ใช้ใน URL) มักจะแสดงด้วยอักขระบวก '+' ด้วย
  • อักขระอยู่ในชุดอักขระข้างต้นเป็นอักขระที่สงวนไว้ แต่ต้องใช้ตามตัวอักษร ตัวอย่างเช่น ? ใช้ใน URL เพื่อระบุจุดเริ่มต้นของสตริงการค้นหา หากคุณต้องการใช้สตริง "? and the 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

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

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

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

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

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