Làm cách nào để thoát ký hiệu trong XML để chúng được hiển thị dưới dạng các thực thể trong HTML?


523

Tôi có một số văn bản XML mà tôi muốn kết xuất trong trang HTML. Văn bản này chứa ký hiệu, mà tôi muốn hiển thị trong biểu diễn thực thể của nó : &.

Làm cách nào để thoát khỏi ký hiệu này trong XML nguồn? Tôi đã thử &, nhưng điều này được giải mã là ký tự dấu và (thực tế &) không hợp lệ trong HTML .

Vì vậy, tôi muốn thoát nó theo cách mà nó sẽ được hiển thị như &trong trang web sử dụng đầu ra XML.


1
Khiếu nại trong phiên bản mới nhất của câu hỏi này rằng "ký tự dấu và (...) thực tế không hợp lệ trong HTML." là sai. Thật vậy, ngay cả câu trả lời được chấp nhận cho câu hỏi được liên kết được cung cấp dưới dạng trạng thái biện minh "HTML5 cho phép bạn không trả lời câu hỏi đó, nhưng chỉ khi dữ liệu theo sau không giống như tham chiếu ký tự hợp lệ" .
Đánh dấu Amery

Câu trả lời:


422

Khi XML của bạn chứa &, điều này sẽ dẫn đến văn bản &.

Khi bạn sử dụng nó trong HTML, nó sẽ được hiển thị dưới dạng &.


195

Theo §2.4 của thông số XML 1.0 , bạn sẽ có thể sử dụng &.

Tôi đã thử & amp; nhưng điều này không được phép.

Bạn có chắc chắn đó không phải là một vấn đề khác? XML định nghĩa rõ ràng đây là cách để thoát khỏi ký hiệu.


3
Điều này là hoàn toàn hợp lý khi được đăng, nhưng những thay đổi (hoặc có thể làm rõ) cho câu hỏi vì đã làm cho nó có vẻ vô nghĩa như một câu trả lời. Đối với một điều, đoạn trích dẫn không còn hiện diện trong câu hỏi.
Đánh dấu Amery

133

Bản thân &ký tự này là một ký tự thoát trong XML, vì vậy giải pháp là ghép nó và một số thập phân Unicode tương đương để &đảm bảo rằng không có lỗi phân tích cú pháp XML. Đó là, thay thế nhân vật &bằng &.


5
Tôi thực sự thích giải pháp này! Cũng có thể sử dụng ký hiệu thập lục phân:&
CodeManX

2
Theo logic, tại sao điều này sẽ làm việc? Cả hai chuỗi đều có ký hiệu và bao gồm cả chuỗi có mã ký tự ở cuối ...
sijpkes

4
@sijpkes Vì ký hiệu và ở đây cho trình phân tích cú pháp rằng các ký tự sau được sử dụng để thể hiện một ký tự khác, trong trường hợp này sẽ là ký hiệu và ký hiệu. Một dấu và không "bất hợp pháp" trong XML-- nó chỉ có một ý nghĩa đặc biệt. Nó có nghĩa là "tất cả các ký tự sau này cho đến khi bạn nhấn một dấu chấm phẩy nên được dịch sang thứ khác". Khi bạn có ký hiệu và bình thường, không có các ký tự mô tả và dấu chấm phẩy, trình phân tích cú pháp sẽ bị lẫn lộn.
Riley Major

1
Đây là câu trả lời cho tôi. Thêm & # 038; trong Vị trí của Tiêu đề phản hồi của tôi đã sửa nó và không hiển thị Dấu và trên Tiêu đề phản hồi. : D
iamjoshua

Stack Overflow rất tuyệt vời. Đây là một bài viết gần 11 năm giải quyết vấn đề của tôi. Và nó đã được xem hơn 690.000 lần.
Hóa đơn

69

Sử dụng CDATAthẻ:

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

4
Đây là một phỏng đoán chứ không phải là một câu trả lời.
Bryan Oakley

10
Nó có thể là một phỏng đoán; nó đúng Các dấu CDATA cho phép sử dụng ký hiệu thô.
Quentin

19
Bài viết gốc không bao giờ làm rõ nơi & sẽ được sử dụng, thẻ CDATA không thể được sử dụng cho các giá trị thuộc tính, chỉ cho nội dung thực tế của các thẻ, do đó tôi đưa vào '?'.
scragar

1
Điều này cũng tuyệt vời để mô tả dữ liệu xml và câu trả lời này hữu ích trong nhiều tình huống khác liên quan đến kết xuất xml. Đối với tôi, nó thực sự hữu ích trong Camel XML DSL, khi tôi cần đặt phần thân hoặc một số tiêu đề với một số dữ liệu XML, trình phân tích cú pháp Camel XML đã bỏ qua nội dung CDATA, đọc chúng dưới dạng một dòng ký tự. Không có điều này, động cơ lạc đà ném ngoại lệ cấu trúc xml không hợp lệ
Kimutai

1
Đây chính xác là câu trả lời tôi cần, vì trong trường hợp của tôi, tôi không chắc những ký tự nào có thể xuất hiện trong XML, vì vậy tôi cần phải thoát mọi thứ trong phần đó.
Matt


11

Trong trường hợp của tôi, tôi đã phải thay đổi nó thành %26.

Tôi cần phải thoát &trong một URL. Vì vậy, &amp;đã không làm việc cho tôi. Hàm urlencode thay đổi &thành %26. Theo cách này, cả XML và cơ chế URL của trình duyệt đều phàn nàn về URL.


8
Đúng. Lưu ý rằng OP đã thoát về XML. Thoát trong một URL là một vấn đề khác nhau. Thú vui thực sự bắt đầu khi bạn có URL bằng XML hoặc các đoạn XML trong URL ...
Oskar Berggren

6

Tôi đã thử & amp, nhưng nó không hoạt động. Dựa trên câu trả lời của Wim ten Brink, tôi đã thử & amp; amp và nó đã hoạt động.

Một trong những nhà phát triển đồng nghiệp của tôi đề nghị tôi sử dụng & # x26; và nó hoạt động bất kể bao nhiêu lần nó có thể được kết xuất.


5

&amp; là cách để thể hiện một dấu và trong hầu hết các phần của tài liệu XML.

Nếu bạn muốn hiển thị XML trong HTML, trước tiên bạn cần tạo XML được mã hóa chính xác (bao gồm thay đổi &thành &amp;) và sau đó sử dụng XML để tạo HTML được mã hóa chính xác (liên quan đến việc thay đổi lại &thành &amp;). Điều đó dẫn đến:

&amp;amp;

Để biết giải thích kỹ hơn về mã hóa XML, hãy xem:

Những ký tự nào tôi cần thoát trong tài liệu XML?


4

<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text> sẽ thực hiện các mẹo.


3

Làm thế nào về việc sử dụng unicode \u0026? Hoạt động với tôi trong các tệp XML của Android. Nếu có vấn đề phát sinh, ai đó cho tôi biết.


1
\uCác lối thoát không có ý nghĩa đặc biệt trong XML nói chung. -1.
Đánh dấu Amery

@MarkAmery Vâng, chúng không có ý nghĩa đặc biệt, đó chính là lý do tại sao chúng hoạt động rất tốt - không có gì để giải thích, vì vậy không có gì sai. Java diễn giải unicode và hiển thị ký hiệu và như OP muốn.
Scott Bigss

1
@ScottBiggs Java để làm gì với câu hỏi của OP?
Philippe-André Lorin

1
@ScottBiggs Vì vậy, nó lạc đề. - 1.
Philippe-André Lorin

1
@ScottBiggs Thực tế là nó hoạt động cho bạn, và một số người khác có thể có lợi, là không liên quan; câu trả lời của bạn là tiếng ồn cho tất cả các độc giả khác. Bởi vì nó không giải quyết với trường hợp chung hơn mà OP đã hỏi. Đây không phải là về việc không chia sẻ thành công của bạn. Đây là về việc giữ nó ở nơi nó thuộc về. Đóng góp của bạn có thể hữu ích, nhưng không được trình bày dưới dạng câu trả lời ở đây. Có thể là một nhận xét, có thể là một câu trả lời cho một câu hỏi khác (mà bạn có thể tự do tạo và trả lời).
Philippe-André Lorin

0

Hãy xem xét nếu XML của bạn trông như dưới đây.

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

Bạn không thể sử dụng <>trực tiếp vì nó gây ra lỗi. Trong trường hợp đó, bạn có thể sử dụng &#60;&#62;thay thế điều đó.

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

Nhấn vào đây để xem tất cả các mã.


2
Tôi nghĩ rằng mặt bằng này đã được bảo vệ tốt trong 7 năm trước khi câu trả lời này được đăng.
miken32
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.