2011-01-24 40 views
5

Tại sao lỗi hiển thị XML trên các ký tự đặc biệt nhất định và một số là ok?Lỗi phân tích cú pháp XML: thực thể không xác định - các ký tự đặc biệt

Ví dụ, dưới đây sẽ tạo ra lỗi,

<?xml version="1.0" standalone="yes"?> 
<Customers> 
    <Customer> 
     <Name>L&ouml;ic</Name> 
    </Customer> 
</Customers> 

nhưng điều này là ok,

<?xml version="1.0" standalone="yes"?> 
<Customers> 
    <Customer> 
     <Name>&amp;</Name> 
    </Customer> 
</Customers> 

tôi chuyển đổi các ký tự đặc biệt thông qua php - htmlentities('Löic',ENT_QUOTES) bằng cách này.

Làm cách nào để giải quyết vấn đề này?

Cảm ơn.

EDIT:

tôi thấy rằng nó hoạt động tốt nếu tôi sử dụng ký tự số như L&#243;ic

bây giờ tôi phải tìm cách sử dụng php để chuyển đổi ký tự đặc biệt vào các ký tự số!

Trả lời

17

Có năm đơn vị được định nghĩa trong đặc tả XML - &amp;, &lt;, &gt;, &apos;&quot;

lots of entities defined in the HTML DTD.

Bạn không thể sử dụng những từ HTML trong XML chung chung.

Bạn có thể sử dụng tài liệu tham khảo số, nhưng bạn có lẽ sẽ tốt hơn hết chỉ nhận character encodings thẳng của bạn (mà cơ bản để nắm:

  • Set your editor để lưu các dữ liệu trong UTF-8
  • Nếu bạn xử lý dữ liệu bằng ngôn ngữ lập trình, hãy đảm bảo rằng UTF-8 biết
  • Nếu bạn lưu trữ dữ liệu trong cơ sở dữ liệu, hãy đảm bảo dữ liệu được định cấu hình cho UTF-8
  • Khi bạn phân phát tài liệu của mình, hãy đảm bảo HTTP tiêu đề xác định rằng nó là UTF-8 (trong trường hợp của XML, UTF-8 là mặc định, vì vậy không xác định bất cứ điều gì là gần như tốt)

)

+0

Dorward: Cảm ơn. Tôi đã thử với biểu tượng này ('UTF-8', 'ISO-8859-1 // TRANSLIT', 'Löic'), sau đó nó cho tôi lỗi này - Thông báo: iconv() [function.iconv]: Đã phát hiện một multibyte chưa hoàn chỉnh ký tự trong chuỗi đầu vào trong ... – laukok

+1

+1, nhưng anh ta vẫn cần sử dụng các thực thể dạng số cho các ký tự bị cấm trong XML (ví dụ: U + 0003). – Artefacto

+0

Có, UTF-8 sẽ không giúp ích gì nếu bạn đang cố gắng gửi   hoặc ö trong XML. – mikato

3

Bởi vì nó không phải là một thực thể built-in, nó là thay vào đó một thực thể bên ngoài cần khai báo trong DTD.

Các vấn đề liên quan