ใน HTML อักขระ <, > และ & มีความหมายพิเศษและต้อง escape เสมอ แต่ภาษาไทยมีความซับซ้อนอีกชั้นหนึ่งที่ต่างจากภาษาที่ใช้ตัวอักษรเดี่ยว นั่นคือสระและวรรณยุกต์ที่ลอยอยู่เหนือหรือใต้พยัญชนะ ซึ่งกระทบโดยตรงต่อการเข้ารหัสเป็นเอนทิตี
สระลอยและวรรณยุกต์: อักขระที่ต้องเรียงลำดับให้ถูก
คำภาษาไทยอย่าง "กี่" ประกอบด้วยพยัญชนะ สระที่ลอยอยู่ด้านบน และวรรณยุกต์ที่ซ้อนทับกันอีกชั้น ซึ่งแต่ละส่วนเป็นอักขระ Unicode แยกกันคนละตัว หากมีการตัดข้อความผิดตำแหน่งระหว่างแปลงเป็นเอนทิตีตัวเลข สระหรือวรรณยุกต์อาจหลุดจากพยัญชนะที่มันควรอยู่ด้วย ทำให้ข้อความหลังถอดรหัสแสดงผลเพี้ยนหรือลอยผิดตำแหน่ง
ไม่มีเอนทิตีแบบมีชื่อสำหรับอักษรไทย
ต่างจากอักษรละตินบางตัวที่มีเอนทิตีแบบมีชื่อ เช่น é อักษรไทยทุกตัวไม่มีชื่อเอนทิตีเฉพาะ ตัวอักษร "ก" ต้องเขียนด้วยรหัสตัวเลขเท่านั้น เช่น ก ดังนั้นเครื่องมือใดก็ตามที่แปลงข้อความภาษาไทยเป็นเอนทิตีจะต้องพึ่งพารหัสตัวเลขหรือเลขฐานสิบหกล้วน ๆ
ชุดอักขระขั้นต่ำที่ต้อง escape
<→<— เพื่อไม่ให้แท็กเริ่มต้น>→>— เพื่อปิดข้อความหลังแท็กอย่างถูกต้อง&→&— เพื่อไม่ให้ & ถูกอ่านเป็นจุดเริ่มต้นของเอนทิตีอื่น"และ'→",'— จำเป็นภายในค่าแอตทริบิวต์ที่อยู่ในเครื่องหมายคำพูด
ไม่มีการเว้นวรรคระหว่างคำ: ผลกระทบต่อการแสดงผล
ภาษาไทยไม่เว้นวรรคระหว่างคำในประโยคเดียวกัน เบราว์เซอร์จึงต้องใช้กฎการตัดคำภายในเพื่อขึ้นบรรทัดใหม่ให้ถูกจุด การแทรกเอนทิตีตัวเลขกลางคำโดยไม่ตั้งใจ (เช่นจากการตัดสตริงผิดตำแหน่ง) อาจทำให้ตัวตัดคำของเบราว์เซอร์สับสนและขึ้นบรรทัดใหม่ในตำแหน่งที่ไม่เหมาะสม
ความเกี่ยวข้องกับ XSS
ช่องโหว่ XSS ส่วนใหญ่เกิดขึ้นเพราะข้อความที่ผู้ใช้ป้อนเข้ามาถูกแทรกลงใน HTML โดยไม่ escape การแสดงผล "<script>...</script>" โดยไม่แปลงเป็นเอนทิตีจะทำให้เบราว์เซอร์รันมันเป็นโค้ด การ escape เป็นมาตรการป้องกันพื้นฐาน — แต่ไม่ใช่มาตรการเดียว
บริบทมีความสำคัญ: ข้อความเทียบกับแอตทริบิวต์
การ escape <, > และ & เพียงพอสำหรับข้อความระหว่างแท็ก แต่ภายในแอตทริบิวต์ที่อยู่ในเครื่องหมายคำพูด จำเป็นต้อง escape เครื่องหมายคำพูดชนิดที่ใช้อยู่นั้นเพิ่มเติมด้วย หากแอตทริบิวต์ถูกล้อมด้วยเครื่องหมายคำพูดคู่ และในค่านั้นมีเครื่องหมายคำพูดคู่ที่ไม่ถูก escape มาร์กอัปจะขาดเร็วกว่าที่คาดไว้