อักขระบางตัวต้องไม่เป็นส่วนหนึ่งของ 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 |
---|---|---|
ตัวอักษรและตัวเลข | a b c d e f g h i j k l m n o p q r s t u v a 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 | สตริงข้อความ, การใช้รูปแบบ (http ), พอร์ต (8080 ) ฯลฯ |
ไม่ได้จอง | - _ ~ | สตริงข้อความ |
จองแล้ว | ! * ' ( ) ; : @ & = + $ , / ? % # [ ] | อักขระควบคุมและ/หรือสตริงข้อความ |
เมื่อสร้าง 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 ยังมีความยาวไม่เกิน 8, 192 อักขระ สำหรับบริการบนเว็บของ Google Maps Platform และ API เว็บแบบคงที่ทั้งหมด สำหรับบริการส่วนใหญ่ จำนวนอักขระสูงสุดนี้แทบจะไม่เคยจำกัดเลย อย่างไรก็ตาม โปรดทราบว่าบางบริการมีพารามิเตอร์หลายอย่างที่อาจส่งผลให้ URL ยาวขึ้น