ฉันจะหลีกเลี่ยงเครื่องหมายใน XML เพื่อให้แสดงเป็นเอนทิตีใน HTML ได้อย่างไร


523

ฉันมีข้อความ XML ที่ฉันต้องการให้แสดงในหน้า HTML &ข้อความนี้มีเครื่องหมายซึ่งผมต้องการที่จะแสดงผลในการเป็นตัวแทนกิจการที่:

ฉันจะหนีแอมเปอร์แซนด์นี้ใน XML ต้นทางได้อย่างไร ฉันพยายาม&แต่นี่คือถอดรหัสเป็นตัวละครที่เกิดขึ้นจริงเครื่องหมาย ( &) ซึ่งเป็นที่ไม่ถูกต้องในรูปแบบ HTML

ดังนั้นฉันต้องการที่จะหลบหนีในลักษณะที่มันจะถูกแสดง&ในหน้าเว็บที่ใช้เอาท์พุท XML


1
การอ้างสิทธิ์ในการแก้ไขล่าสุดของคำถามนี้ว่า"ตัวอักษรเครื่องหมายและ (&) ... ไม่ถูกต้องใน HTML" เป็นเท็จ อันที่จริงแม้คำตอบที่ได้รับการยอมรับให้กับคำถามที่เชื่อมโยงให้เป็นรัฐเหตุผล"HTML5 ช่วยให้คุณสามารถปล่อยให้มันใช้ Escape แต่เมื่อข้อมูลที่ตามมาดูไม่เหมือนอ้างอิงอักขระที่ถูกต้อง"
Mark Amery

คำตอบ:


422

เมื่อ XML ของคุณมีนี้จะส่งผลให้ในข้อความ&&

เมื่อคุณใช้ใน HTML, &ที่จะกลายเป็น


195

ตามข้อมูลจำเพาะของ .42.4 ของ XML 1.0คุณควรใช้งาน&ได้

ฉันลอง & amp; แต่สิ่งนี้ไม่ได้รับอนุญาต

คุณแน่ใจหรือไม่ว่าไม่ใช่ปัญหาอื่น XML กำหนดอย่างชัดเจนว่านี่เป็นวิธีที่จะหลีกเลี่ยงเครื่องหมาย


3
นี่คือเหตุผลที่สมบูรณ์แบบเมื่อโพสต์ แต่การเปลี่ยนแปลง (หรืออาจจะชี้แจง) คำถามเนื่องจากได้ทำให้มันดูไร้สาระเป็นคำตอบ สำหรับสิ่งหนึ่งข้อความที่ยกมานั้นไม่มีอยู่ในคำถามอีกต่อไป
Mark Amery

132

&ตัวอักษรเป็นตัวเองตัวหนีในรูปแบบ XML เพื่อแก้ปัญหาคือการเชื่อมมันและ Unicode เทียบเท่าทศนิยม&จึงมั่นใจได้ว่าจะไม่มีข้อผิดพลาดการแยกวิเคราะห์ XML นั่นคือแทนที่ตัวอักษรกับ&&


5
ฉันชอบวิธีนี้มาก! ควรเป็นไปได้ที่จะใช้สัญลักษณ์เลขฐานสิบหก:&
CodeManX

2
เหตุใดจึงใช้งานได้ ทั้งสองสายมีเครื่องหมายรวมทั้งคนหนึ่งที่มีรหัสตัวอักษรบนท้าย ...
sijpkes

4
@sijpkes เนื่องจากเครื่องหมายแอมเปอร์แซนด์ที่นี่บอกตัวแยกวิเคราะห์ว่ามีการใช้อักขระต่อไปนี้เพื่อแทนอักขระอื่นซึ่งในกรณีนี้จะเป็นแอมเปอร์แซนด์ เครื่องหมายและไม่ใช่ "ผิดกฎหมาย" ใน XML - แต่มีความหมายพิเศษ หมายถึง "ตัวละครทั้งหมดหลังจากนี้จนกว่าคุณจะตีอัฒภาคควรแปลเป็นอย่างอื่น" เมื่อคุณมีเครื่องหมายแอมเปอร์แซนด์ตามปกติโดยไม่มีอักขระอธิบายและเครื่องหมายอัฒภาคต่อท้ายตัวแยกวิเคราะห์จะสับสน
Riley Major

1
นี่คือคำตอบสำหรับฉัน กำลังเพิ่ม & # 038; ในตำแหน่งของส่วนหัวการตอบสนองของฉันแก้ไขได้และไม่แสดงเครื่องหมายในการตอบสนองส่วนหัว : D
iamjoshua

Stack Overflow ยอดเยี่ยมมาก นี่คือโพสต์เก่าเกือบ 11 ปีที่แก้ปัญหาของฉัน และมีผู้ชมมากกว่า 690,000 ครั้ง
Bill

69

ใช้CDATAแท็ก:

 <![CDATA[
   This is some text with ampersands & other funny characters. >>
 ]]>

4
นี่คือการคาดเดามากกว่าคำตอบ
ไบรอัน Oakley

10
อาจเป็นการเดา มันถูกต้องว่า เครื่องหมาย CDATA อนุญาตให้ใช้เครื่องหมายแอมเปอร์แซนด์ดิบ
Quentin

19
โพสต์ดั้งเดิมไม่ชัดเจนที่ & จะใช้แท็ก CDATA ไม่สามารถใช้สำหรับค่าคุณลักษณะเฉพาะสำหรับเนื้อหาจริงของแท็กดังนั้นเหตุผลที่ฉันรวม '?'
scragar

1
นี่เป็นวิธีที่ยอดเยี่ยมสำหรับการแสดงลักษณะข้อมูล xml และคำตอบนี้มีประโยชน์ในสถานการณ์อื่น ๆ ที่เกี่ยวข้องกับการสร้างภาพ xml สำหรับฉันมันช่วยได้จริง ๆ ใน Camel XML DSL เมื่อฉันต้องการตั้งค่าเนื้อหาหรือส่วนหัวที่มีข้อมูล XML บางส่วน Camel XML parser จะละเว้นเนื้อหา CDATA โดยอ่านเป็นตัวอักษร หากปราศจากสิ่งนี้เครื่องยนต์ของอูฐจะใช้ข้อยกเว้นโครงสร้าง xml ที่ไม่ถูกต้อง
Kimutai

1
นี่เป็นคำตอบที่ฉันต้องการอย่างแน่นอนเพราะในกรณีของฉันฉันไม่แน่ใจว่าอักขระตัวใดที่จะมาใน XML ดังนั้นฉันจึงต้องหลบหนีทุกอย่างในส่วนนั้น
Matt

44

&amp;ควรจะทำงานได้ดีวิกิพีเดียมีรายการของหน่วยงานที่กำหนดไว้ล่วงหน้าในรูปแบบ XML


11

%26ในกรณีของฉันฉันจะต้องเปลี่ยนไป

ฉันต้องหลบหนี&ใน URL ดังนั้น&amp;ฉันจึงไม่ได้ผล urlencodeฟังก์ชั่นการเปลี่ยนแปลงไป& %26วิธีนี้ไม่มีทั้ง XML และกลไก URL ของเบราว์เซอร์บ่นเกี่ยวกับ URL


8
ใช่. โปรดทราบว่า OP เกี่ยวกับการหลบหนีใน XML การหลบหนีใน URL เป็นปัญหาที่แตกต่าง ความสนุกที่แท้จริงเริ่มต้นขึ้นเมื่อคุณมี URL ใน XML หรือ XML-fragments ใน URL ...
Oskar Berggren

6

ฉันลอง & amp แต่ไม่ได้ผล จากคำตอบของ Wim ten Brink ฉันได้ลองใช้ & amp; และได้ผล

นักพัฒนาเพื่อนคนหนึ่งของฉันแนะนำให้ฉันใช้ & # x26; และใช้งานได้โดยไม่คำนึงว่าจะสามารถแสดงผลได้กี่ครั้ง


5

&amp; เป็นวิธีในการแสดงเครื่องหมายแอมเปอร์แซนด์ในเกือบทุกส่วนของเอกสาร XML

หากคุณต้องการที่จะมี XML แสดงภายใน HTML คุณต้องแรกสร้าง XML เข้ารหัสอย่างถูกต้อง (ซึ่งเกี่ยวข้องกับการเปลี่ยนแปลง&ที่จะ&amp;) และจากนั้นใช้ในการสร้างอย่างถูกต้องเข้ารหัส HTML (ที่เกี่ยวข้องอีกครั้งเปลี่ยน&ไป&amp;) ผลลัพธ์เป็น:

&amp;amp;

สำหรับคำอธิบายที่ละเอียดยิ่งขึ้นเกี่ยวกับการเข้ารหัส XML ดู:

ฉันต้องใช้อักขระใดในการหลบหนีในเอกสาร XML



3

วิธีการเกี่ยวกับการใช้ Unicode \u0026? ทำงานให้ฉันในไฟล์ XML Android ของฉัน หากมีปัญหาเกิดขึ้นมีคนแจ้งให้เราทราบ


1
\uescapes ไม่มีความหมายพิเศษใน XML โดยทั่วไป -1
Mark Amery

@ MarkAmery ใช่พวกเขาไม่มีความหมายพิเศษซึ่งเป็นเหตุผลว่าทำไมพวกเขาทำงานได้ดี - ไม่มีอะไรจะตีความดังนั้นจึงไม่มีอะไรผิดพลาด java ตีความ unicode และแสดงเครื่องหมายและตามที่ OP ต้องการ
Scott Biggs

1
@ScottBiggs Java จะทำอย่างไรกับคำถามของ OP
Philippe-André Lorin

1
@ScottBiggs ดังนั้นจึงเป็นหัวข้อ - 1.
Philippe-André Lorin

1
@ScottBiggs ความจริงที่ว่ามันเหมาะกับคุณและคนอื่น ๆ อาจได้รับประโยชน์นั้นไม่เกี่ยวข้อง คำตอบของคุณคือเสียงสำหรับผู้อ่านคนอื่น ๆ เพราะมันไม่ได้จัดการกับกรณีทั่วไปมากขึ้นที่ OP ถาม นี่ไม่เกี่ยวกับการไม่แบ่งปันความสำเร็จของคุณ นี่คือการรักษาว่ามันอยู่ที่ไหน การบริจาคของคุณอาจมีประโยชน์ แต่ไม่ได้แสดงไว้เป็นคำตอบที่นี่ อาจเป็นความคิดเห็นอาจเป็นคำตอบสำหรับคำถามอื่น (ซึ่งคุณสามารถสร้างและตอบคำถามด้วยตัวเองได้)
Philippe-André Lorin

0

พิจารณาว่า XML ของคุณมีลักษณะอย่างไรด้านล่าง

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
  <Query>
</Employees>

คุณไม่สามารถใช้งาน<>ได้โดยตรงเนื่องจากเกิดข้อผิดพลาด ในกรณีนั้นคุณสามารถใช้&#60;&#62;แทนสิ่งนั้นได้

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES &#60;&#62; 'GCF'
  <Query>
</Employees>

คลิกที่นี่เพื่อดูรหัสทั้งหมด


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