mysql_real_escape_string
used when insert into database
htmlentities()
used when outputting data into webpage
htmlspecialchars()
used when?
strip_tags()
used when?
addslashes()
used when?
htmlspecialchars() used when?
htmlspecialchars
is roughly the same as htmlentities
. The difference: character encodings.
Both encode control characters like <
, >
, &
and so on used for opening tags etc. htmlentities
also encode chars from other languages like umlauts, euro-symbols and such. If your websites are UTF, use htmlspecialchars()
, otherwise use htmlentities()
.
strip_tags() used when?
htmlspecialchars
/ entities
encode the special chars, so they're displayed but not interpreted. strip_tags
REMOVES them.
In practice, it depends on what you need to do.
An example: you've coded a forum, and give users a text field so they can post stuff. Malicious ones just try:
pictures of <a href="javascript:void(window.setInterval(function () {window.open('http://evil.example');}, 1000));">kittens</a> here
If you don't do anything, the link will be displayed and a victim that clicks on the link gets lots of pop-ups.
If you htmlentity/htmlspecialchar your output, the text will be there as-is. If you strip_tag it, it simply removes the tags and displays it:
pictures of kittens here
Sometimes you may want a mixture, leave some tags in there, like <b>
(strip_tags
can leave certain tags in there). This is unsafe too, so better use some full blown library against XSS.
addslashes
To quote an old version of the PHP manual:
Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash () and NUL (the NULL byte).
An example use of addslashes() is when you're entering data into a database. For example, to insert the name O'reilly into a database, you will need to escape it. It's highly recommeneded to use DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_string() for PostgreSQL), but if the DBMS you're using does't have an escape function and the DBMS uses \ to escape special chars, you can use this function.
The current version is worded differently.
basename(realpath($path))
. – Nucleotidase