Pastikan Anda menyetel double_encode
menjadi false
, jika tidak, string yang sudah dikodekan akan dikodekan lagi, mengubah &
ke dalam &
. Kemudian ketika Anda pergi untuk menampilkannya setelah menggunakan html_entity_decode
, itu akan muncul seolah-olah masih dikodekan.
Hasil yang Tidak Diinginkan:http://ideone.com/uQxuAM
Menggunakan htmlentities($string, ENT_QUOTES, 'UTF-8', false);
akan memastikan ini tidak akan terjadi.
Kemudian gunakan html_entity_decode($string, ENT_QUOTES, 'UTF-8');
untuk menampilkan nilai.
Namun, MySQL sepenuhnya mampu menyimpan nilai-nilai yang didekodekan dalam database.
Anda tidak pernah ingin memiliki string yang disandikan dengan entitas html yang disimpan di database Anda. Apa yang terjadi ketika Anda ingin membuat CSV atau PDF, mengirim email, atau apa pun yang bukan HTML?
Selain fakta bahwa Anda harus melakukan dua kali pemrograman pengkodean data, meningkatkan jumlah data dalam database, kemudian masih perlu mendekode output, ada banyak artikel online yang menjawab mengapa Anda tidak melakukannya.
Jadi, Anda hanya perlu mengkodekan nilai untuk menampilkan output data yang dihasilkan dalam html.
Alih-alih, Anda harus keluar dari input menggunakan mysqli_real_escape_string
$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>';
$sql = "INSERT INTO links (link)"
. "VALUES(" . mysqli_real_escape_string($string) . "')";
atau lebih baik lagi gunakan pernyataan yang sudah disiapkan
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
Kemudian memformat output sebagai pesan sukses untuk menampilkan apa yang sebenarnya ditambahkan ke database.
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
Sekarang tidak perlu menggunakan html_entity_decode
agar html dirender di browser.