ต้องใช้อักขระใดบ้างในเอกสาร XML หรือฉันจะหารายการดังกล่าวได้จากที่ใด
ต้องใช้อักขระใดบ้างในเอกสาร XML หรือฉันจะหารายการดังกล่าวได้จากที่ใด
คำตอบ:
หากคุณใช้คลาสหรือห้องสมุดที่เหมาะสมพวกเขาจะหลบหนีให้คุณ ปัญหา XML หลายอย่างเกิดจากการต่อสตริง
มีเพียงห้า:
" "
' '
< <
> >
& &
การหลีกเลี่ยงอักขระขึ้นอยู่กับตำแหน่งที่ใช้อักขระพิเศษ
ตัวอย่างที่สามารถตรวจสอบได้ที่W3C Markup การตรวจสอบการให้บริการ
วิธีที่ปลอดภัยคือหลบหนีทั้งห้าตัวอักษรในข้อความ แต่ตัวละครทั้งสาม"
, '
และ>
ไม่จำเป็นต้องหนีออกมาในข้อความ:
<?xml version="1.0"?>
<valid>"'></valid>
วิธีที่ปลอดภัยคือการหลีกเลี่ยงอักขระทั้งห้าในแอ็ตทริบิวต์ อย่างไรก็ตาม>
ตัวละครไม่จำเป็นต้องถูกหลีกเลี่ยงในลักษณะ:
<?xml version="1.0"?>
<valid attribute=">"/>
'
ตัวละครไม่จำเป็นต้องหนีแอตทริบิวต์ถ้าคำพูดที่มี"
:
<?xml version="1.0"?>
<valid attribute="'"/>
ในทำนองเดียวกันความ"
จำเป็นที่ไม่ต้องหลบหนีในคุณลักษณะถ้าคำพูดคือ'
:
<?xml version="1.0"?>
<valid attribute='"'/>
อักขระพิเศษทั้งห้าจะต้องไม่ถูก Escape ในความคิดเห็น:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
อักขระพิเศษทั้งห้าต้องไม่ถูกยกเว้นในส่วนของCDATA :
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
อักขระพิเศษทั้งห้าตัวต้องไม่ถูกยกเว้นในคำแนะนำในการประมวลผล XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML มีชุดรหัสการหลบหนีของตัวเองซึ่งครอบคลุมอักขระจำนวนมาก
"
นั้นจะเปลี่ยนเป็น&quot;
บางทีนี่อาจช่วย:
รายการอ้างอิงเอนทิตีอักขระ XML และ HTML :
ใน SGML, เอกสาร HTML และ XML โครงสร้างเชิงตรรกะที่รู้จักกันในชื่อข้อมูลอักขระและค่าแอตทริบิวต์ประกอบด้วยลำดับของอักขระซึ่งอักขระแต่ละตัวสามารถแสดงรายการโดยตรง (แสดงถึงตัวมันเอง) หรือสามารถแสดงด้วยชุดอักขระที่เรียกว่าการอ้างอิงอักขระ ซึ่งมีอยู่สองประเภท: การอ้างอิงอักขระตัวเลขและการอ้างอิงเอนทิตีอักขระ บทความนี้แสดงรายการการอ้างอิงเอนทิตีอักขระที่ใช้ได้ในเอกสาร HTML และ XML
บทความนั้นแสดงเอนทิตี XML ที่กำหนดไว้ล่วงหน้าห้ารายการต่อไปนี้:
quot "
amp &
apos '
lt <
gt >
ตามข้อกำหนดของ World Wide Web Consortium (w3C) มี 5 ตัวอักษรที่ต้องไม่ปรากฏในรูปแบบตัวอักษรในเอกสาร XMLยกเว้นเมื่อใช้เป็นตัวคั่นมาร์กอัปหรือภายในความคิดเห็นคำสั่งการประมวลผลหรือส่วน CDATA . ในทุกกรณีอื่น ๆ ตัวละครเหล่านี้จะต้องถูกแทนที่โดยใช้เอนทิตีที่สอดคล้องกันหรือการอ้างอิงตัวเลขตามตารางต่อไปนี้:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
โปรดสังเกตว่าเอนทิตีดังกล่าวสามารถใช้ใน HTML ได้ยกเว้น& apos; ที่ถูกนำมาใช้กับ XHTML 1.0 และไม่ได้ประกาศใน HTML 4 ด้วยเหตุนี้และเพื่อให้แน่ใจว่ามีความเข้ากันได้ย้อนยุคข้อกำหนด XHTML แนะนำให้ใช้ & # 39; แทน.
>
ต้องหนีออกมาถ้ามันตามมา]]
ภายในเนื้อหายกเว้นว่ามันตั้งใจจะเป็นส่วนหนึ่งของ]]>
ตัวคั่นที่ระบุจุดสิ้นสุดของส่วน CDATA
การหลีกเลี่ยงอักขระแตกต่างกันสำหรับแท็กและแอตทริบิวต์
สำหรับแท็ก:
< <
> > (only for compatibility, read below)
& &
สำหรับแอตทริบิวต์:
" "
' '
อักขระเครื่องหมายแอมเปอร์แซนด์ (&) และวงเล็บมุมซ้าย (<) ต้องไม่ปรากฏในรูปแบบตัวอักษรยกเว้นเมื่อใช้เป็นตัวคั่นมาร์กอัปหรือภายในความคิดเห็นคำสั่งการประมวลผลหรือส่วน CDATA หากจำเป็นต้องใช้ที่อื่นพวกเขาจะต้องหลบหนีโดยใช้การอ้างอิงอักขระตัวเลขหรือสตริง "& amp;" และ "& lt;" ตามลำดับ วงเล็บมุมขวา (>) อาจแสดงโดยใช้สตริง "& gt;" และต้องใช้ความสามารถในการเข้ากันได้โดยใช้ "& gt;" หรือการอ้างอิงอักขระเมื่อปรากฏในสตริง "]]>" ในเนื้อหา เมื่อสตริงนั้นไม่ได้ทำเครื่องหมายจุดสิ้นสุดของส่วน CDATA
หากต้องการอนุญาตให้ค่าแอตทริบิวต์มีทั้งเครื่องหมายอัญประกาศเดี่ยวและเครื่องหมายอัญประกาศคู่อักขระเครื่องหมายอัญประกาศเดี่ยวหรือเครื่องหมายอัญประกาศเดี่ยว (') อาจแสดงเป็น "& apos;" และอักขระเครื่องหมายคำพูดคู่ (") เป็น" & quot; "
ใหม่คำตอบที่ง่ายขึ้นสำหรับคำถามเก่าที่พบบ่อย ...
เสมอ (90% สำคัญที่ต้องจำ)
ค่าคุณสมบัติ (9% สำคัญที่ต้องจำ)
attr="
'
คำพูดเดี่ยว'
ก็โอเคภายในเครื่องหมายคำพูดคู่"
attr='
"
เครื่องหมายคำพูดคู่"
จะใช้ได้ภายในเครื่องหมายคำพูดเดี่ยว'
"
เป็น"
และ'
เป็น'
อย่างอื่นความคิดเห็น , CDATAและคำแนะนำในการประมวลผล (0.9% สำคัญที่ต้องจำ)
<!--
ภายในความคิดเห็น -->
ไม่ต้องมีการหลบหนี แต่ไม่--
อนุญาตให้ใช้สตริง<![CDATA[
ภายในCDATA ]]>
ไม่มีอะไรที่จะต้องหลบหนี แต่ไม่]]>
อนุญาตให้ใช้สตริง<?PITarget
ภายในPIs ?>
ไม่มีอะไรที่ต้องหลบหนี แต่ไม่?>
อนุญาตให้ใช้สตริงEsoterica (สำคัญ 0.1% ที่ต้องจำ)
]]>
ราวกับ]]>
ว่า]]>
กำลังจะสิ้นสุดส่วน CDATA ]]>
จะต้องได้รับการยกเว้นเป็น]]>
แม้ว่าจะไม่ได้อยู่ในส่วนของ CDATA วิธีที่ง่ายที่สุดในการบรรลุเป้าหมายที่อาจจะเสมอหลบหนีเป็น>
>
]]>
แต่เลือกที่จะขับไล่มัน esoterica แทนที่จะบอกว่า>
มักจะหนี (ซึ่งมันไม่จำเป็นต้องเป็นคุณรู้) เป้าหมายของฉันที่นี่เพื่อทำ XML กฎหลบหนีจดจำได้ง่าย และ ถูกต้อง 100%
AttValue
การอ้างถึงในคำตอบของฉันผ่านการเชื่อมโยงบน2. ค่าแอตทริบิวต์
นอกเหนือจากอักขระห้าตัวที่รู้จักกันทั่วไป [<,>, &, "และ '] แล้วฉันยังสามารถหลีกเลี่ยงอักขระแท็บแนวตั้ง (0x0B) ได้มันเป็น UTF-8 ที่ถูกต้อง แต่ไม่ใช่ XML 1.0 ที่ถูกต้องและแม้แต่ไลบรารีจำนวนมาก (รวมถึงไลบรารีlibxml2แบบพกพาสูง (ANSI C ) ที่พลาดไม่ได้และส่งออก XML ที่ไม่ถูกต้องอย่างเงียบ ๆ
สรุปโดย: XML, Escaping
มีเอนทิตีที่กำหนดไว้ล่วงหน้าห้ารายการ:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"อักขระ Unicode ที่ได้รับอนุญาตทั้งหมดอาจแสดงด้วยการอ้างอิงอักขระตัวเลข" ตัวอย่างเช่น:
中
อักขระควบคุมส่วนใหญ่และช่วง Unicode อื่น ๆ ได้รับการยกเว้นโดยเฉพาะความหมาย (ฉันคิดว่า) พวกเขาไม่สามารถหนีหรือควบคุมได้โดยตรง:
มันขึ้นอยู่กับบริบท สำหรับเนื้อหานั้นคือ<และ& , และ]]> (แม้ว่าจะเป็นสตริงสามตัวแทนที่จะเป็นหนึ่งตัวอักษร)
สำหรับค่าแอตทริบิวต์มันเป็น< , และ , "และ'
สำหรับ CDATA มันเป็น]]>
เฉพาะ<
และ&
จำเป็นต้องได้รับการยกเว้นหากจำเป็นต้องได้รับการปฏิบัติกับข้อมูลตัวอักษรไม่ใช่มาร์กอัป:
<company>AT&T</company>