Pertanyaan Karakter apa yang harus saya lepaskan dalam dokumen XML?


Karakter apa yang harus diloloskan dalam dokumen XML, atau di mana saya dapat menemukan daftar seperti itu?


783
2017-07-07 12:07


asal


Jawaban:


Jika Anda menggunakan kelas atau perpustakaan yang tepat, mereka akan melakukan pelarian untuk Anda. Banyak masalah XML disebabkan oleh penggabungan string.

Karakter escape XML

Hanya ada lima:

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

Karakter melarikan diri tergantung pada di mana karakter khusus digunakan.

Contoh-contoh ini dapat divalidasi pada Layanan Validasi Markup W3C.

Teks

Cara yang aman adalah untuk melarikan diri semua lima karakter dalam teks, bagaimanapun, tiga karakter ", ' dan > tidak perlu diloloskan dalam teks:

<?xml version="1.0"?>
<valid>"'></valid>

Atribut

Cara yang aman adalah untuk melepaskan diri dari lima karakter dalam atribut, bagaimanapun, > karakter tidak perlu di-escape dalam atribut:

<?xml version="1.0"?>
<valid attribute=">"/>

Itu ' karakter tidak perlu diloloskan dalam atribut jika tanda kutipnya ":

<?xml version="1.0"?>
<valid attribute="'"/>

Demikian juga, " tidak perlu luput dari atribut jika tanda kutipnya ':

<?xml version="1.0"?>
<valid attribute='"'/>

Komentar

Semua 5 karakter khusus tidak harus Anda dapat melarikan diri di komentar:

<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>

CDATA

Semua 5 karakter khusus tidak harus melarikan diri CDATA bagian:

<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>

Memproses instruksi

Semua 5 karakter khusus tidak harus Anda bisa lolos dalam petunjuk pemrosesan XML:

<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>

XML vs. HTML

HTML punya serangkaian kode pelolosannya sendiri yang mencakup lebih banyak karakter.


1153
2017-07-07 12:09



Mungkin ini akan membantu:

Daftar referensi entitas karakter XML dan HTML:

Dalam SGML, HTML dan dokumen XML,   konstruksi logis yang dikenal sebagai karakter   data dan nilai atribut terdiri dari   urutan karakter, di mana masing-masing   karakter dapat bermanifestasi secara langsung   (mewakili dirinya sendiri), atau bisa juga   diwakili oleh serangkaian karakter   disebut referensi karakter, yang mana   ada dua jenis: numerik   referensi karakter dan karakter   referensi entitas. Artikel ini mendaftar   entitas karakter referensi itu   valid dalam dokumen HTML dan XML.

Artikel itu mencantumkan lima entitas XML yang telah ditentukan berikut ini:

quot  "
amp   &
apos  '
lt    <
gt    >

87
2017-07-07 12:09



Sesuai dengan spesifikasi World Wide Web Consortium (w3C), ada 5 karakter yang tidak boleh muncul dalam bentuk literalnya dalam dokumen XML, kecuali bila digunakan sebagai pembatas markup atau dalam komentar, instruksi pemrosesan, atau bagian CDATA. Dalam semua kasus lain, karakter ini harus diganti baik menggunakan entitas yang sesuai atau referensi numerik sesuai dengan tabel berikut:

Karakter AsliPenggantian entitas XMLPenggantian numerik XML
<& lt;<
>& gt;>
"& quot;"
&& amp;&
'& apos;'

Perhatikan bahwa entitas yang disebutkan di atas dapat digunakan juga dalam HTML, dengan pengecualian & apos;, yang diperkenalkan dengan XHTML 1.0 dan tidak dideklarasikan dalam HTML 4. Karena alasan ini, dan untuk memastikan kompatibilitas retro, spesifikasi XHTML merekomendasikan penggunaan ' sebagai gantinya.


65
2017-07-03 12:38



Karakter escaping berbeda untuk tag dan atribut.

Untuk tag:

 < &lt;
 > &gt; (only for compatibility, read below)
 & &amp;

Untuk atribut:

" &quot;
' &apos;

http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

Karakter ampersand (&) dan kurung sudut kiri (<) tidak boleh   muncul dalam bentuk literalnya, kecuali bila digunakan sebagai pembatas markup,   atau dalam komentar, instruksi pemrosesan, atau bagian CDATA. Jika   mereka dibutuhkan di tempat lain, mereka harus lolos menggunakan numerik   referensi karakter atau string "& amp;" dan "& lt;"   masing-masing. Braket sudut kanan (>) dapat diwakili menggunakan   string "& gt;", dan harus, untuk kompatibilitas, dapat diloloskan menggunakan salah satunya   "& gt;" atau referensi karakter ketika muncul dalam string "]]>   "dalam konten, ketika string itu tidak menandai akhir CDATA   bagian.

Untuk memungkinkan nilai atribut mengandung tanda kutip tunggal dan ganda,   tanda kutip atau karakter kutip tunggal (') dapat direpresentasikan sebagai "   & apos; ", dan karakter kutip ganda (") sebagai "& quot;".


44
2018-02-05 10:03



selain lima karakter yang dikenal [<,>, &, ", '] Saya juga akan keluar dari karakter tab vertikal (0x0B). Ini adalah UTF-8 yang valid, tetapi tidak valid XML 1.0, dan bahkan banyak pustaka (termasuk libxml2) melewatkannya dan diam-diam menampilkan XML yang tidak valid.


19
2018-04-25 13:38



Jawaban baru yang disederhanakan untuk pertanyaan lama yang biasa ditanyakan ...

Pelolosan XML Sederhana

  1. Selalu  (90% penting untuk diingat)

    • Melarikan diri < sebagai &lt; kecuali kalau < mulai a <tag/>.
    • Melarikan diri & sebagai &amp; kecuali kalau & sedang memulai &entity;.
  2. Nilai Atribut  (9% penting untuk diingat)

    • attr="  'Kutipan tunggal' ok dalam tanda kutip ganda."
    • attr='  "Kutipan ganda" ok dalam tanda kutip tunggal.'
    • Melarikan diri " sebagai &quot; dan ' sebagai &apos; jika tidak.
  3. Komentar, CDATA, dan Memproses Instruksi  (0,9% penting untuk diingat)

    • <!-- Dalam komentar  --> tidak ada yang harus diloloskan tetapi tidak -- string diperbolehkan.
    • <![CDATA[ Dalam CDATA  ]]> tidak ada yang harus diloloskan, tetapi tidak ]]> string diperbolehkan.
    • <?PITarget Dalam PI  ?> tidak ada yang harus diloloskan, tetapi tidak ?> string diperbolehkan.
  4. Esoterica  (0,1% penting untuk diingat)

    • Melarikan diri ]]> sebagai ]]&gt; kecuali kalau ]]> sedang mengakhiri bagian CDATA.
      (Aturan ini berlaku untuk data karakter secara umum - bahkan di luar bagian CDATA.)

9
2017-10-09 01:54



Ringkas dari: http://en.wikipedia.org/wiki/XML#Escaping

Ada lima entitas yang telah ditetapkan:

&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "

"Semua karakter Unicode yang diizinkan dapat diwakili dengan referensi karakter numerik." Misalnya:

&#20013;

Sebagian besar karakter kontrol dan rentang unicode lainnya secara khusus dikecualikan, yang berarti (saya pikir) mereka tidak dapat terjadi baik melarikan diri atau langsung:

http://en.wikipedia.org/wiki/Valid_characters_in_XML


4
2017-08-15 07:53