htmlspecialchars() function PHP

htmlspecialchars() function berguna untuk mengubah beberapa character entity menjadi nama entity.

Character entity adalah symbol seperti double quote ["] dan symbol lebih kecil dari [<]. Setiap character entity memiliki nama entity seperti [&quot;] untuk ["] dan [&lt;] untuk [<].

Tidak semua character entity diubah oleh htmlspecialchars() function, hanya character entity yang memiliki arti penting di dalam HTML.

Berikut ini adalah beberapa character entity yang bisa diubah oleh htmlspecialchars() function dan perubahannya:

  • [&] (ampersand) akan menjadi [&amp;]
  • ["] (double quote) akan menjadi [&quot;] saat ENT_NOQUOTES tidak digunakan.
  • ['] (single quote) akan menjadi [&#039;] (atau &apos;) saat ENT_QUOTES digunakan.
  • [<] (less than) akan becomes [&lt;]
  • [>] (greater than) akan menjadi [&gt;]

htmlspecialchars() memiliki fungsi yang hampir sama dengan htmlentities() function. Perbedaannya adalah htmlspecialchars() function hanya mengubah beberapa character entity yaitu: &"'<>, sedangkan htmlentities() mengubah semua character entity.

Dua manfaat mengubah character entity menjadi nama entity adalah supaya character entity bisa ditampilkan pada browser dan supaya character entity tidak dianggap code sehingga menyebabkan kekacauan saat disimpan pada database.

Syntax

string htmlspecialchars(string $string, int $flags, string $encoding, bool $double_encode)

Parameter

Parameter Penjelasan
string Parameter ini wajib ada. String yang ingin diproses.
flags Parameter ini pilihan. Menentukan proses yang akan dilakukan terhadap quote, invalid code unit sequences, dan doctype yang digunakan.

Berikut ini adalah pilihan proses untuk mengubah quote:

  • ENT_COMPAT (Default). Hanya mengubah double quote ["].
  • ENT_QUOTES. Mengubah single ['] dan double quote ["].
  • ENT_NOQUOTES. Tidak mengubah kedua jenis quote (single dan double quote).

Berikut ini adalah pilihan proses terhadap invalid encoding:

  • ENT_IGNORE. Menghapus character invalid encoding dari string.
  • ENT_SUBSTITUTE. Mengubah invalid encoding dengan Unicode Replacement Character U+FFFD (UTF-8) atau &#FFFD.
  • ENT_DISALLOWED. Mengubah invalid encoding yang disebabkan karena tidak cocok dengan jenis doctype menjadi Unicode Replacement Character U+FFFD (UTF-8) atau &#FFFD.

Berikut ini adalah pilihan proses terhadap code berdasarkan jenis doctype:

  • ENT_HTML401 (Default). Code diproses sebagai HTML 4.01
  • ENT_HTML5. Code diproses sebagai HTML 5
  • ENT_XML1. Code diproses sebagai XML 1
  • ENT_XHTML. Code diproses sebagai XHTML
encoding Parameter ini pilihan. Menentukan jenis character set yang ingin digunakan untuk memproses string. Berikut ini adalah beberapa jenis character set yang bisa digunakan:

  • UTF-8 (Default).
  • ISO-8859-1
  • ISO-8859-15
  • cp866
  • cp1251
  • cp1252
  • KOI8-R
  • BIG5
  • GB2312
  • BIG5-HKSCS
  • Shift_JIS
  • EUC-JP
  • MacRoman

Jika parameter ini dikosongkan maka nilai dari parameter ini tergantung dari versi PHP yang digunakan. PHP 5.6 menggunakan default_charset, PHP 5.4 dan 5.5 menggunakan UTF-8, sedangkan versi PHP sebelumnya menggunakan ISO-8859-1.

Jika string yang akan diproses oleh htmlspecialchars() function di-encoded dalam ISO-8859-1 sedangkan htmlspecialchars() memproses string menggunakan UTF-8 maka bisa terjadi invalid encoding. Solusinya adalah mengisi parameter ini dengan encoding yang sama yaitu ISO-8859-1.

Salah satu hal yang bisa menyebabkan input string tidak cocok dengan htmlspecialchars() function adalah text editor (notepad pada windows). Simpan file pada encoding yang sesuai (UTF-8).

double_encode Parameter ini pilihan. Menentukan untuk mengubah semua character entity atau tidak:

  • TRUE (Default). Bila parameter ini tidak diisi atau diisi dengan TRUE maka semua character entity akan diubah.
  • FALSE. Tidak akan mengubah character entity yang sudah ada.

Catatan

htmlspecialchars() function menghasilkan string yang telah diubah.

Jika string berisi invalid encoding maka htmlspecialchars() function akan menghasilkan string kosong kecuali parameter flags menggunakan ENT_IGNORE atau ENT_SUBSTITUTE.

Nilai default parameter character-set pada PHP 5.4 diubah dari ISO-8859-1 menjadi UTF-8.

ENT_SUBSTITUTE, ENT_DISALLOWED, ENT_HTML401, ENT_HTML5, ENT_XML1 dan ENT_XHTML baru ada di PHP 5.4.

ENT_IGNORE baru ada di PHP 5.3.

Parameter double_encode baru ada di PHP 5.2.3.

Parameter character-set baru ada di PHP 4.1.

Character set atau character encoding bisa diibaratkan seperti sebuah font (Arial, times new roman, dll). Setiap aplikasi memiliki character set tersendiri. Contoh, character set yang digunakan oleh HTML 5 adalah UTF-8.

Setiap character dalam sebuah character set memiliki urutan yang yang disebut sebagai encoding. Contoh, Character set ASCII berisi character bahasa Inggris dan beberapa symbol lainnya yang diwakilkan dengan angka mulai dari 1 sampai 127. Sedangkan character set ISO berisi bahasa Eropa.

Encoding bisa digunakan untuk mengubah sebuah character dalam character set A menjadi character dalam character set B dengan membandingkan urutan angka encoding tersebut.

Invalid code unit sequences atau invalid encoding adalah character yang tidak berhasil diencoding sehingga tidak terbaca. Contoh, user memberikan data yang ditulis dalam sebuah character set A melalui sebuah web form dan saat web ingin menyimpan data tersebut dalam character set B ada beberapa character yang tidak berhasil diubah ke dalam character set B.

Contoh

Perhatikan contoh penggunaan htmlspecialchars() function berikut ini:

Code PHP 1:

<?php
$percobaan = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $percobaan;
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;

Pada code di atas kita menggunakan parameter flags dengan ENT_QUOTES yang artinya double quote serta single quote akan diubah menjadi nama entity.

Hasil running code di atas bila dilihat melalui browser akan tampak sebagai berikut ini:

<a href=’test’>Test</a>

Berikut ini adalah contoh htmlspecialchars() function menggunakan parameter flags dengan ENT_NOQUOTES:

Code PHP 2:

<?php
$percobaan = htmlspecialchars("<a href='test'>Test</a>", ENT_NOQUOTES);
echo $percobaan;
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

&lt;a href='test'&gt;Test&lt;/a&gt;

Pada code di atas kita menggunakan parameter flags dengan ENT_NOQUOTES yang artinya tidak ada quote yang diubah baik single maupun double quote.

Perbedaan ENT_IGNORE dan ENT_SUBSTITUTE

Berikut ini adalah contoh perbedaan penggunaan ENT_IGNORE dan ENT_SUBSTITUTE.

Code PHP 3:

<?php
var_dump(htmlspecialchars("a\x80b"));  
var_dump(htmlspecialchars("a\x80b", ENT_IGNORE));   
var_dump(htmlspecialchars("a\x80b", ENT_SUBSTITUTE)); 
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

string(0) ""
string(2) "ab"
string(5) "a�b"

Character [\x80] adalah character yang tidak valid pada UTF-8.

Pada code pertama, htmlspecialchars() function tidak menggunakan ENT_IGNORE maupun ENT_SUBSTITUTE sehingga htmlspecialchars() function menghasilkan string kosong karena pada string yang diproses berisi invalid encoding [\x80].

Pada code kedua, htmlspecialchars() function menggunakan ENT_IGNORE sehingga hanya character invalid encoding yang dihapus dari string.

Pada code ketiga, htmlspecialchars() function menggunakan ENT_SUBSTITUTE sehingga character invalid encoding yang ada pada string diubah menjadi Unicode Replacement Character U+FFFD (UTF-8) yaitu symbol .

Selain ENT_IGNORE dan ENT_SUBSTITUTE, parameter flags masih memiliki satu pilihan lain yaitu ENT_DISALLOWED. ENT_DISALLOWED berguna untuk mengubah character entity yang secara formal adalah valid encoding namun character entity tersebut berdasarkan jenis doctype adalah tidak valid.

Jenis doctype pada parameter flags

Pada PHP 5.4 ada tambahan pilihan pada parameter flags yaitu doctype:

  • ENT_HTML401 (HTML 4.01) – Default
  • ENT_HTML5 (HTML 5)
  • ENT_XML1 (XML 1)
  • ENT_XHTML (XHTML)

Setiap jenis doctype menggunakan character set yang berbeda. Perhatikan contoh berikut ini:

Code PHP 4:

<?php
var_dump(htmlspecialchars("'", ENT_QUOTES | ENT_HTML401));
var_dump(htmlspecialchars("'", ENT_QUOTES | ENT_HTML5));
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

string(6) "&#039;"
string(6) "&apos;"

Pada code pertama, htmlspecialchars() function menghasilkan [&#039;] karena pada HTML 4.01 masih belum mendukung nama entity [&apos;] sehingga yang muncul adalah code entity [&#039;].

Berdasarkan contoh di atas kita bisa mengetahui bahwa setiap jenis doctype memiliki character set tersendiri.

Lihat function lainnya:

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>