Apa perbedaan antara htmlspecialchars()
dan htmlentities()
. Kapan saya harus menggunakan yang satu atau yang lain?
Dari dokumentasi PHP untuk htmlentities :
Fungsi ini identik dengan
htmlspecialchars()
semua cara, kecuali denganhtmlentities()
, semua karakter yang memiliki persamaan karakter karakter HTML diterjemahkan ke dalam entitas ini.
Dari dokumentasi PHP untuk htmlspecialchars :
Karakter tertentu memiliki arti khusus dalam HTML, dan harus diwakili oleh entitas HTML jika mereka ingin mempertahankan maknanya. Fungsi ini mengembalikan string dengan beberapa konversi ini dibuat; terjemahan yang dibuat adalah yang paling berguna untuk pemrograman web sehari-hari. Jika Anda meminta semua entitas karakter HTML diterjemahkan, gunakan
htmlentities()
saja.
Perbedaannya adalah apa yang dikodekan. Pilihannya adalah segalanya (entitas) atau karakter "khusus", seperti ampersand, tanda kutip ganda dan tunggal, kurang dari, dan lebih besar dari (specialchars).
Saya lebih suka menggunakan htmlspecialchars
kapanpun memungkinkan.
Sebagai contoh:
echo htmlentities('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^^^^^^^^ ^^^^^^^
echo htmlspecialchars('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^ ^
htmlspecialchars()
jika memungkinkan, selain perbedaan yang jelas? Situasi apa yang akan Anda gunakanhtmlentities()
menyebabkan masalah padahalhtmlspecialchars()
tidak?htmlentities
danhtmlspecialchars
keduanya dapat menangani UTF-8 selama Anda tentukan"UTF-8"
untuk argumen ketiga.htmlspecialchars
dapat digunakan:Ketika tidak perlu untuk menyandikan semua karakter yang memiliki padanan HTML-nya.
Jika Anda tahu bahwa penyandian halaman cocok dengan simbol teks khusus, mengapa Anda menggunakan
htmlentities
?htmlspecialchars
jauh lebih mudah, dan menghasilkan lebih sedikit kode untuk dikirim ke klien.Sebagai contoh:
Yang kedua lebih pendek, dan tidak menyebabkan masalah jika ISO-8859-1 charset diatur.
Ketika data akan diproses tidak hanya melalui browser (untuk menghindari penguraian kode HTML dari entitas),
Jika hasilnya adalah XML (lihat jawabannya oleh Artefacto ).
sumber
Ini sedang dikodekan dengan
htmlentities
.implode( "\t", array_values( get_html_translation_table( HTML_ENTITIES ) ) )
:Ini sedang dikodekan dengan
htmlspecialchars
.implode( "\t", array_values( get_html_translation_table( HTML_SPECIALCHARS ) ) )
:sumber
Karena:
htmlentities
menggantikan lebih banyak karakter daripadahtmlspecialchars
. Ini tidak perlu, membuat skrip PHP kurang efisien dan kode HTML yang dihasilkan kurang mudah dibaca.htmlentities
hanya diperlukan jika halaman Anda menggunakan penyandian seperti ASCII atau LATIN-1, bukan UTF-8 dan Anda sedang menangani data dengan penyandian yang berbeda dari halaman.sumber
Anda harus menggunakan
htmlspecialchars($strText, ENT_QUOTES)
ketika Anda hanya ingin string Anda menjadi XML dan HTML aman:Misalnya, menyandikan
Namun, jika Anda juga memiliki karakter tambahan yang Unicode atau simbol yang tidak umum dalam teks Anda maka Anda harus menggunakan htmlentities () untuk memastikan mereka muncul dengan benar di halaman HTML Anda.
Catatan:
sumber
htmlspecialchars ()
melakukan jumlah minimum pengkodean untuk memastikan bahwa string Anda tidak diuraikan sebagai HTML. Ini membuat string Anda lebih terbaca oleh manusia daripada jika Anda biasahtmlentities ()
mengenkode semua yang memiliki encoding.sumber
Saya baru tahu tentang
get_html_translation_table
fungsinya. Anda meneruskannyaHTML_ENTITIES
atauHTML_SPECIALCHARS
mengembalikan array dengan karakter yang akan dikodekan dan bagaimana mereka akan dikodekan.sumber
htmlentities - Konversi semua karakter yang berlaku ke entitas HTML.
htmlspecialchars - Konversi karakter khusus ke entitas HTML.
Terjemahan dilakukan karakter terjemahan di bawah ini:
Anda dapat memeriksa kode berikut untuk informasi lebih lanjut tentang apa itu htmlentities dan htmlspecialchars:
https://gist.github.com/joko-wandiro/f5c935708d9c37d8940b
sumber
Anda mungkin ingin menggunakan beberapa pengkodean karakter Unicode, misalnya UTF-8 , dan htmlspecialchars. Karena tidak ada setiap kebutuhan untuk menghasilkan "entitas HTML" untuk "semua [yang] karakter yang berlaku" (yang adalah apa yang htmlentities tidak sesuai dengan dokumentasi) jika sudah di set karakter Anda.
sumber
Salah satu contoh kecil, saya perlu memiliki 2 nama klien yang diindeks dalam suatu fungsi:
Saya awalnya
$term = get_term_by('name', htmlentities($name), 'client');
yang menghasilkan nama-nama istilah yang hanya termasuk item array ampersand (&) tetapi tidak item beraksen. Tetapi ketika saya mengubah pengaturan variabel untukhtmlspecialchars
keduanya dapat menjalankan melalui fungsi. Semoga ini membantu!sumber
Perbedaan antara htmlspecialchars () dan htmlentities () sangat kecil. Mari kita lihat beberapa contoh:
htmlspecialchars (string $ string) mengambil beberapa argumen di mana argumen pertama adalah string dan semua argumen lainnya (flag tertentu, penyandian tertentu, dll.) adalah opsional. htmlspecialchars mengonversi karakter khusus dalam string ke entitas HTML. Sebagai contoh jika Anda memiliki <br> dalam string Anda, htmlspecialchars akan mengubahnya menjadi & lt; b & gt; . Sedangkan karakter seperti µ † dll. Tidak memiliki arti khusus dalam HTML. Jadi mereka tidak akan dikonversi ke entitas HTML dengan fungsi htmlspecialchars seperti yang ditunjukkan pada contoh di bawah ini.
htmlentities (string $ string) sangat mirip dengan htmlspecialchars dan mengambil banyak argumen di mana argumen pertama adalah string dan semua argumen lainnya adalah opsional (flag tertentu, pengkodean tertentu, dll.). Tidak seperti htmlspecialchars , htmlentities tidak hanya mengkonversi karakter khusus dalam string ke entitas HTML tetapi semua karakter yang berlaku untuk entitas HTML.
sumber
https://dev.w3.org/html5/html-author/charref
Tidak sepenuhnya, silakan lacak tautan untuk mendokumentasikan sepenuhnya.
sumber