Let me see if I can help make things clear... Basically everything depends on what you are going to do with the data.
Lets say that you are going to simply echo the data to the web page. When a user enters tags in the input field, such as "<marquee>I can post!!!!</marquee>", the angle brackets get sent to the browser "as is" and are interpreted as tags. If you look at the source code to the resulting page, you will see exactly "<marquee>I can post!!!!</marquee>", and the page will display the ugly result of the <marquee> tag - the scrolling words of a juvenile with no direction.
Now, if you first do htmlspecialchars() to the data, before you output to the page, then the angle brackets get changed into '<' and '>' and the web browser will not interpret the string as containing HTML tags. Instead, the browser will interpret the '<' and the '>' as instructions to output the angle brackets to the page. Now the input text "<marquee>I can post!!!!</marquee>" will be displayed on the page as it was entered. If you look at the source code in this case, you will see "<marquee>I can post!!!!</marquee>".
If you plan to store this information in a database, then performing htmlspecialchars() on the input first will result in the following being stored: "<marquee>I can post!!!!</marquee>". If you do this, then there isn't a chance of the database query being cracked. However, as laserlight suggested, the resulting text is stored as a somewhat confusing string which needs to be converted before doing anything other than printing to a web page.
In order to completely remove tags, use strip_tags(). This will remove opposing angle brackets (<>, not ><), and anything in-between. If you do this, then the input data becomes "I can post!!!!".
See this page in the PHP manual for more info.
Does that help?