ฉันทดสอบโดยขอเว็บไซต์ (apache) พร้อมตัวอักษรทั้งหมดที่มีอยู่บนแป้นพิมพ์ภาษาเยอรมันเป็นพารามิเตอร์ URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
สิ่งเหล่านี้ไม่ได้เข้ารหัส:
^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
ไม่ได้เข้ารหัสหลังจากurlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
ไม่ได้เข้ารหัสหลังจากrawurlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
หมายเหตุ: ก่อน PHP 5.3.0 rawurlencode()
เข้ารหัส~
เพราะRFC 1738 แต่นี่ถูกแทนที่ด้วยRFC 3986ดังนั้นมันจึงปลอดภัยที่จะใช้ตอนนี้ แต่ฉันไม่เข้าใจว่าทำไม{}
มีการเข้ารหัสตัวอย่างเช่นrawurlencode()
เพราะพวกเขาไม่ได้กล่าวถึงใน RFC 3986
การทดสอบเพิ่มเติมที่ฉันทำคือเกี่ยวกับการลิงก์อัตโนมัติในข้อความอีเมล ฉันทดสอบ Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de และ yahoo.de และพวกเขาเชื่อมโยง URL ทั้งหมดที่มีตัวอักษรเหล่านี้:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
แน่นอนว่ามีการ?
เชื่อมโยงเช่นกัน แต่ถ้าใช้ครั้งเดียวเท่านั้น
บางคนอาจแนะนำให้ใช้เฉพาะตัวrawurlencode()
อักษร แต่คุณเคยได้ยินว่ามีคนมีปัญหาในการเปิดเว็บไซต์เหล่านี้หรือไม่
ดอกจัน
http://wayback.archive.org/web/*/http://google.com
โคลอน
https://en.wikipedia.org/wiki/Wikipedia:About
พลัส
https://plus.google.com/+google
ที่ลงชื่อเครื่องหมายลำไส้ใหญ่เครื่องหมายจุลภาคและเครื่องหมายอัศเจรีย์
https: //www.google.com/maps/place/USA/@36.2218457, ...
เนื่องจากตัวอักษรเหล่านี้ควรใช้งานได้โดยไม่มีการเข้ารหัสโดยไม่มีปัญหา แน่นอนคุณไม่ควรใช้เพราะเข้ารหัสลำดับเช่น&;
&
เหตุผลเดียวกันนี้ใช้ได้สำหรับ%
การเข้ารหัสทั่วไป และ=
ในขณะที่มันกำหนดค่าให้กับชื่อพารามิเตอร์
ในที่สุดฉันจะบอกว่ามันโอเคที่จะใช้การเข้ารหัสเหล่านี้:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
แต่ถ้าคุณคาดหวังว่า URL ที่สร้างขึ้นแบบสุ่มคุณไม่ควรใช้.!
เพราะสิ่งเหล่านั้นทำเครื่องหมายจุดสิ้นสุดของประโยคและแอปอีเมลบางตัวจะไม่เชื่อมโยงอักขระตัวสุดท้ายของ URL โดยอัตโนมัติ ตัวอย่าง:
Visit http://example.com/foo=bar! !
!*'();:@&=+$,/?#[]
หรือตรงไปตรงมาA-Za-z0-9_.~-
(หรือตัวละครที่ร้อยละ%
เป็นส่วนหนึ่งของการเข้ารหัสเปอร์เซ็นต์)