ความแตกต่างระหว่างการเข้ารหัส URL และการเข้ารหัส HTML


86

อะไรคือความแตกต่างระหว่างการเข้ารหัส URLและการเข้ารหัส HTML ?


5
หากคุณต้องการเข้ารหัสเพื่อใช้ใน URL คุณใช้การเข้ารหัส URL หากคุณต้องการเข้ารหัสเพื่อแสดงบนหน้า HTML คุณเข้ารหัส HTML
Mitch Wheat

4
การเข้ารหัส URL จะเข้ารหัสอักขระเพื่อให้ใช้ได้กับ URL เช่น?กลายเป็น%3Fเข้ารหัส HTML จะเข้ารหัสอักขระเพื่อให้ใช้ได้กับ HTML เช่น<กลายเป็น&lt;
Matt Ellen

คำตอบ:


85

การเข้ารหัส HTML หลีกเลี่ยงอักขระพิเศษในสตริงที่ใช้ในเอกสาร HTML เพื่อป้องกันความสับสนกับองค์ประกอบ HTML เช่นการเปลี่ยนแปลง

"<hello>world</hello>" 

ถึง

"&lt;hello&gt;world&lt;/hello&gt;"

การเข้ารหัส URL ทำสิ่งที่คล้ายกันสำหรับค่าสตริงใน URL เช่นการเปลี่ยนแปลง

"hello+world = hello world"

ถึง

"hello%2Bworld+%3D+hello+world"

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

1
ต้องผ่านและแทนที่การใช้งาน HtmlEncode หลายรายการสำหรับการเข้ารหัส url ด้วย UrlEncoding ปัญหาเกี่ยวกับการเข้ารหัสช่องว่างและอักขระพิเศษอื่น ๆ
PJUK

ระวังการใช้ HtmlEncode แทน UrlEncode อาจเป็นปัญหาสำหรับ URL เนื่องจาก HtmlEncode ใส่อักขระ "&" ​​ไว้ในสตริงของคุณ ขึ้นอยู่กับว่าบริการเว็บของคุณที่ได้รับ URL นั้นคาดหวังอะไรอักขระ "&" ​​เพิ่มเติมบางตัวอาจเป็นปัญหามาก ตัวอย่างเช่นหากบริการเว็บของคุณคาดหวังให้แต่ละพารามิเตอร์ใน URL นำหน้าด้วยอักขระ "&" ​​แต่คุณใช้ HtmlEncode ซึ่งเพิ่มอักขระ "&" ​​พิเศษจำนวนมากคุณอาจได้รับข้อผิดพลาดเมื่อบริการเว็บของคุณ พยายามตีความ URL ฉันเพิ่งต้องแทนที่การใช้ HtmlEncode หลายครั้งด้วย UrlEncode ด้วยเหตุผลนี้
jdnew18

3
โปรดอย่าฟังฟิลล์ ฉันคิดว่าเป็นไปไม่ได้ที่จะเชื่อว่าเขาใช้สตริงการสืบค้นและสร้าง URL ที่ทันสมัยโดยใช้ HtmlEncode แทน UrlEncode การบอกว่า UrlEncode ส่วนใหญ่ไม่มีประโยชน์เป็นหนึ่งในสิ่งที่ไร้สาระที่สุดที่ฉันเคยเห็นในไซต์นี้
Nard Dog

23

urlEncode แทนที่อักขระพิเศษด้วยอักขระที่เว็บเบราว์เซอร์ / เว็บเซิร์ฟเวอร์สามารถเข้าใจได้เพื่อจุดประสงค์ในการกำหนดแอดเดรส ... ด้วยเหตุนี้ URL ตัวอย่างเช่นช่องว่างจะถูกแทนที่ด้วย% 20, '=% 27 เป็นต้น ...

ดูข้อมูลอ้างอิงเหล่านี้:

HtmlEncode แทนที่อักขระพิเศษด้วยสตริงอักขระที่เอ็นจิน HTML รู้จักเพื่อแสดงเนื้อหาของเพจสิ่งต่างๆเช่น & กลาย&amp; or < = &lt; > = &lt;เป็นการป้องกันไม่ให้เอ็นจิน HTML แปลความหมายอักขระเหล่านี้เป็นส่วนหนึ่งของมาร์กอัป HTML ดังนั้นจึงแสดงผลเหมือนกับว่าเป็น สตริง

ดูข้อมูลอ้างอิงนี้:


URLEncode ที่จริงจะแทนที่ช่องว่างด้วย + ซึ่งอาจเป็นปัญหาได้ในบางสถานการณ์
NetMage

13

ทั้ง HTML และของ URL เป็นหลักข้อ จำกัด มากภาษา เป็นภาษาที่เพิ่มความหมายให้กับคำหลักหรือตัวดำเนินการที่เฉพาะเจาะจง สำหรับทั้งสองภาษานี้คำหลักมักเป็นอักขระเดี่ยว ตัวอย่างเช่น

  • HTML:> และ <
  • URL: / และ:

ในการใช้ภาษาแต่ละภาษาแม้ว่าจะสามารถใช้โครงสร้างเหล่านี้ในลักษณะที่ไม่มั่นใจในความหมายของภาษา ตัวอย่างเช่นโพสต์นี้มีอักขระ> ฉันไม่ต้องการให้ตีความเป็น HTML เพียงแค่ข้อความ

นี่คือจุดที่วิธีการเข้ารหัสและถอดรหัสเข้ามามีบทบาท วิธีการเหล่านี้จะใช้สตริงตามลำดับและแปลงอักขระใด ๆ ที่จะถือว่าเป็นคีย์เวิร์ดเป็นรูปแบบ Escape ซึ่งจะไม่ถูกตีความว่าเป็นส่วนหนึ่งของภาษา

ตัวอย่างเช่น: การผ่าน> เข้าสู่ HtmlEncode จะคืนค่า & gt;


3

HTMLEncode และ URLEncode จัดการกับอักขระที่ไม่ถูกต้องใน HTML และ URL หรือถูกต้องมากขึ้นอักขระที่ต้องเขียนขึ้นเป็นพิเศษเพื่อให้ตีความได้อย่างถูกต้อง ตัวอย่างเช่นใน HTML จะใช้อักขระ <and> เพื่อระบุแท็ก ดังนั้นหากคุณต้องการเขียนสูตรคณิตศาสตร์เช่น 1 + 1 <2 + 2 โดยปกติ "<" จะถูกตีความว่าเป็นจุดเริ่มต้นของแท็ก HTMLEncoding เปลี่ยนอักขระนี้ให้เป็น "& lt;" ซึ่งเป็นตัวแทนที่เข้ารหัสของเครื่องหมายน้อยกว่า การเข้ารหัส URLE จะเหมือนกัน แต่สำหรับ URL ซึ่งอักขระพิเศษจะแตกต่างกันแม้ว่าจะมีการทับซ้อนกันบ้างก็ตาม


1

ฉันไม่รู้ว่าคุณใช้ภาษาอะไร แต่ตัวอย่างเช่นคู่มือ PHP ให้คำอธิบายที่ดี

URLEncode

ส่งคืนสตริงที่อักขระที่ไม่ใช่ตัวเลขและตัวอักษรทั้งหมดยกเว้น -_ ถูกแทนที่ด้วยเครื่องหมายเปอร์เซ็นต์ (%) ตามด้วยเลขฐานสิบหกสองหลักและช่องว่างที่เข้ารหัสเป็นเครื่องหมายบวก (+) มีการเข้ารหัสแบบเดียวกับที่เข้ารหัสข้อมูลที่โพสต์จากฟอร์ม WWW ซึ่งเป็นวิธีเดียวกับในประเภทสื่อที่เข้ารหัส application / x-www-form-urlencoded สิ่งนี้แตกต่างจากการเข้ารหัส» RFC 1738 (ดู rawurlencode ()) เนื่องจากเหตุผลทางประวัติศาสตร์ช่องว่างจะถูกเข้ารหัสเป็นเครื่องหมายบวก (+)

อ่านต่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.