Karakter apa yang harus diloloskan dalam dokumen XML, atau di mana saya dapat menemukan daftar seperti itu?
Karakter apa yang harus diloloskan dalam dokumen XML, atau di mana saya dapat menemukan daftar seperti itu?
Jawaban:
Jika Anda menggunakan kelas atau pustaka yang sesuai, mereka akan melakukan pelarian untuk Anda. Banyak masalah XML disebabkan oleh penggabungan string.
Hanya ada lima:
" "
' '
< <
> >
& &
Melarikan karakter tergantung pada di mana karakter khusus digunakan.
Contoh-contoh dapat divalidasi di Layanan Validasi Markup W3C .
Cara aman adalah dengan melepaskan semua lima karakter dalam teks. Namun, ketiga karakter tersebut "
, '
dan >
tidak perlu melarikan diri dalam teks:
<?xml version="1.0"?>
<valid>"'></valid>
Cara yang aman adalah melarikan diri kelima karakter dalam atribut. Namun, >
karakter tidak perlu dilepaskan dalam atribut:
<?xml version="1.0"?>
<valid attribute=">"/>
The '
karakter tidak perlu melarikan diri dalam atribut jika kutipan adalah "
:
<?xml version="1.0"?>
<valid attribute="'"/>
Demikian juga, yang "
tidak perlu diloloskan dalam atribut jika kutipannya adalah '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Kelima karakter khusus tidak boleh lolos dalam komentar:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Kelima karakter khusus tidak boleh lolos di bagian CDATA :
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Kelima karakter khusus tidak boleh lolos dalam instruksi pemrosesan XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML memiliki seperangkat kode pelariannya sendiri yang mencakup lebih banyak karakter.
"
akan diubah menjadi&quot;
Mungkin ini akan membantu:
Daftar referensi entitas karakter XML dan HTML :
Dalam dokumen SGML, HTML, dan XML, konstruksi logis yang dikenal sebagai data karakter dan nilai atribut terdiri dari urutan karakter, di mana setiap karakter dapat bermanifestasi secara langsung (mewakili dirinya sendiri), atau dapat diwakili oleh serangkaian karakter yang disebut referensi karakter, di mana ada dua jenis: referensi karakter numerik dan referensi entitas karakter. Artikel ini mencantumkan referensi entitas karakter yang valid dalam dokumen HTML dan XML.
Artikel itu mencantumkan lima entitas XML yang telah ditentukan berikut ini:
quot "
amp &
apos '
lt <
gt >
Menurut spesifikasi dari World Wide Web Consortium (w3C), ada 5 karakter yang tidak boleh muncul dalam bentuk literalnya dalam dokumen XML , kecuali ketika digunakan sebagai pembatas markup atau dalam komentar, instruksi pemrosesan, atau bagian CDATA . Dalam semua kasus lain, karakter ini harus diganti menggunakan entitas yang sesuai atau referensi numerik sesuai dengan tabel berikut:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
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. Untuk alasan ini, dan untuk memastikan kompatibilitas retro, spesifikasi XHTML merekomendasikan penggunaan & # 39; sebagai gantinya.
>
harus diloloskan jika mengikuti ]]
dalam konten, kecuali jika itu dimaksudkan untuk menjadi bagian dari ]]>
pembatas yang menunjukkan akhir dari bagian CDATA.
Melarikan karakter berbeda untuk tag dan atribut.
Untuk tag:
< <
> > (only for compatibility, read below)
& &
Untuk atribut:
" "
' '
Dari Data Karakter dan Markup :
Karakter ampersand (&) dan braket sudut kiri (<) tidak boleh muncul dalam bentuk literalnya, kecuali bila digunakan sebagai pembatas markup, atau dalam komentar, instruksi pemrosesan, atau bagian CDATA. Jika diperlukan di tempat lain, mereka harus melarikan diri menggunakan referensi karakter numerik atau string "& amp;" dan "& lt;" masing-masing. Braket sudut kanan (>) dapat direpresentasikan menggunakan string "& gt;", dan harus, untuk kompatibilitas, diloloskan dengan menggunakan "& gt;" atau referensi karakter ketika muncul dalam string "]]>" dalam konten, ketika string itu tidak menandai akhir dari bagian CDATA.
Untuk memungkinkan nilai atribut mengandung tanda kutip tunggal dan ganda, karakter apostrof atau tanda kutip tunggal (') dapat direpresentasikan sebagai "& apos;", dan karakter tanda kutip ganda (") sebagai" & quot; ".
Baru, jawaban sederhana untuk pertanyaan lama, yang sering diajukan ...
Selalu (90% penting untuk diingat)
Nilai Atribut (9% penting untuk diingat)
attr="
'
Kutipan tunggal '
ok dalam tanda kutip ganda."
attr='
"
Kutipan ganda "
ok dalam tanda kutip tunggal.'
"
seperti "
dan '
sebagaimana '
sebaliknya.Komentar , CDATA , dan Petunjuk Pemrosesan (0,9% penting untuk diingat)
Esoterica (0,1% penting untuk diingat)
]]>
karena ]]>
kecuali ]]>
sedang mengakhiri bagian CDATA. ]]>
harus diloloskan sebagai ]]>
, bahkan ketika tidak ada di bagian CDATA. Cara termudah untuk mencapai yang mungkin untuk selalu melarikan diri >
sebagai >
.
]]>
tetapi memilih untuk memindahkannya ke esoterika daripada menyarankan agar >
selalu melarikan diri (yang tidak perlu, seperti yang Anda tahu). Tujuan saya di sini untuk membuat aturan pelolosan XML mudah diingat dan 100% akurat .
AttValue
dikutip dalam jawaban saya melalui tautan pada 2. Nilai Atribut .
Selain lima karakter yang umum dikenal [<,>, &, ", dan '], saya juga akan keluar dari karakter tab vertikal (0x0B). Ini adalah UTF-8 yang valid, tetapi tidak valid XML 1.0, dan bahkan banyak perpustakaan (termasuk libxml2 library sangat portabel (ANSI C) ) melewatkannya dan diam-diam menghasilkan XML yang tidak valid.
Ringkas dari: XML, Lolos
Ada lima entitas yang telah ditetapkan:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"Semua karakter Unicode yang diizinkan dapat diwakili dengan referensi karakter numerik." Sebagai contoh:
中
Sebagian besar karakter kontrol dan rentang Unicode lainnya dikecualikan secara khusus, artinya (saya pikir) mereka tidak dapat terjadi melarikan diri atau langsung:
Itu tergantung pada konteksnya. Untuk konten, itu adalah < dan & , dan ]]> (meskipun string tiga bukannya satu karakter).
Untuk nilai atribut, itu adalah < , & , " , dan ' .
Untuk CDATA, ini adalah ]]> .
Hanya <
dan &
diharuskan untuk melarikan diri jika mereka akan diperlakukan data karakter dan bukan markup:
<company>AT&T</company>