когда это копипаста с сайта, сделанного криворуким прыщавым кодером, где кавычки экранируются лишний раз при добавлении поста в базу данных.
тут какое дело. к примеру, сайт написан на php, база данных - mySQL. к примеру, мы заполнили текстовую форму, к примеру, как эта, в которой я сейчас пишу комментарий, и на сервер отправляются данные из этой формы. и эта информация должна быть добавлена в БД, используя запрос к БД. в коде он будет выглядеть вот так:
$db->query('INSERT INTO `comments` (`comment`) VALUES("Это текст нашего комментария";');
в кавычках - наш введенный текст. то, что мы должны добавить в базу данных должно быть обёрнуто в кавычки. но, что делать, если мы ввели не Это текст нашего комментария, а Это текст нашего "комментария"? т.е. если текст содержит кавычки? для этого мы должны экранировать запись, чтобы при добавлении не вызвать ошибку. таким образом, запрос приобретет вид:
INSERT INTO `comments` (`comment`) VALUES("Это текст нашего \"комментария\"";'. поставив перед кавычками косую черту \ - мы получим запись в базе данных Это текст нашего "комментария". забудем это сделать - получим ошибку при добавлении записи в базу, и у нас будет отличная дыра в безопасности. если же мы по какой-то причине дважды обработаем переменную с текстом - то получим то, что видим - лишнюю косую черту.
насчет html - тут немного другая ситуация. к примеру, мы оставили комментарий вида Это наш комментарий с гадостью внутри <script>window.alert("!");</script> - и на странице, где отображается этот комментарий, получим исполнение js-скрипта - а это очередная уязвимость - кому нужно на его сайте, чтобы выполнялись левые js-скрипты, или пользователь мог корёжить html как ему вздумается?. но если мы экранируем теги перед выводом этого текста - преобразовав < и > в > < - то ничего страшного не случится, и комментарий отобразится именно то, что пользователь ввёл.
я не очень хорошо умею объяснять, простите, но надеюсь, что написал более-менее понятно
ничего бумажного, к сожалению, посоветовать не могу. попробуйте поискать по рутрекеру, http://rutracker.org/forum/tracker.php?nm=mysql
есть классные онлайн-курсы https://www.codecademy.com/ https://www.codeschool.com/ - для начинающих самое оно.
отличный портал - http://www.sql.ru/
хороший справочник, который может оказаться крайне полезным - http://phpclub.ru/mysql/doc/reference.html
полезнейший toster.ru и незаменимый для любого разработчика stackoverflow.com - всегда можно задать интересующий вопрос или найти уже готовый ответ. к примеру -
http://ru.stackoverflow.com/questions/54424/%D0%A1-%D1%87%D0...
Вы наверное думаете, что на пикабу сидят ваши родители и их друзья, бесит просто когда тебе разжёвывают на пальцах простые истины как дурачку из диспансера.) Я почему про сущности сказал, в случае js'а да, экранируем, в случае html используем сущности, так можно и так нужно, а не экранировать текст. На php есть такая функция как htmlentities - полезная вещь.
2) Вы задали вопрос - зачем экранировать кавычки, перед записью в бд - я дал ответ. здесь у Вас небольшое недопонимание - когда стоит использовать экранирование переменной для её вставки в SQL-запрос (mysqli::real_escape_string), а когда использовать преобразование мнемоник (сущностей) (htmlentities, htmlspecialchars).
первое - когда мы хотим добавить в SQL-базу запись в том виде, в котором она есть. второе - когда мы хотим преобразовать строку для отображения в браузере, преобразовывая, к примеру, " в ", скобки в < > и так далее.
т.е. первое относится к вопросам баз данных, второе - к вопросам шаблонизации