which characters are unsafe varies depending on the database. mysql is different than oracle, is different than mssql, etc. (if you look at the documentation, you'll see that magic_quotes escapes ' " \ and NULL - a different list than mysql_real_escape_string()).
That's why you should be using database-specific functions, like mysql_real_escape_string() - but using both leads to the "double-escaping" problem.
Aside from that, not all submitted data is destined to be sent to the database anyway. Unnecessary backslashes can cause problems in other code. Consider this:
HTML Code:
<form method="post">
<p>is your name <b>Adrian</b>?</p>
<input type="submit" name="submit" value="That's my name!">
<input type="submit" name="submit" value="No, it's not">
</form>
PHP Code:
<?php
if( $_POST['submit'] == "That's my name!" ){ /* won't work if magic_quotes is on */ }
elseif( $_POST['submit'] == "No, it's not" ){ /* won't work either */ }
Bookmarks