Должны ли мы кодировать специальные символы HTML перед сохранением их в базе данных? - PullRequest
29 голосов
/ 05 января 2011

Я использую MySQL для хранения данных, и все мои веб-страницы кодируются как UTF-8.У меня есть много португальских символов, таких как ç и õ, и мне интересно, должен ли я экранировать их HTML перед хранением.

Должны ли мы хранить, например, & как &?И почему бы нет)?Каковы преимущества и недостатки / лучшие практики?

Ответы [ 6 ]

51 голосов
/ 05 января 2011

Не кодируйте HTML-символы перед хранением.Вы должны хранить как можно более чистую форму ваших данных.Кодировка HTML необходима, потому что вы собираетесь отображать данные на странице HTML, поэтому кодирование необходимо выполнять во время обработки данных для создания страницы.Например, предположим, что вы решили отправлять данные в виде текстовых электронных писем.Если вы кодировали данные в формате HTML, теперь кодировка HTML - это барьер, который вам нужно отменить.

Выберите каноническую форму для ваших данных и сохраните ее.UTF-8 замечательный, и ваша база данных поддерживает его (при условии, что вы создали все свои таблицы правильно).Просто храните UTF-8.

7 голосов
/ 20 декабря 2013

Исходя из назначения базы данных, не рекомендуется кодировать и хранить данные в формате HTML.Это сделает данные желательными только для рендеринга на HTML-страницах (одна цель) и для всех других операций (многих), которые вам нужно снова декодировать.Это ухудшает согласованность данных (так как валидность, точность, удобство использования затрудняются) свойство базы данных.

2 голосов
/ 03 ноября 2017

Я бы сказал, что кодирование на пути к базе данных на самом деле представляет угрозу безопасности, потому что это означает, что вы, вероятно, не будете кодировать между базой данных и браузером (так как это приведет к двойному кодированию).Это означает, что если есть путь сейчас или в будущем для некодированных данных, чтобы попасть в вашу базу данных, то они будут отправлены в незашифрованный браузер.Лучше кодировать между базой данных и браузером и, следовательно, хранить незашифрованное ИМХО.

2 голосов
/ 03 января 2012

Если вы делаете 100 или 1000 презентаций страниц для каждой записи, то кодирование при вводе будет более эффективным. Но в большинстве случаев я полагаю, что разница будет незначительной.

Но другие причины (не кодировать) хороши, без сомнения, и в любом случае бессмысленно кодировать символы, которые нравятся UTF-8.

2 голосов
/ 05 января 2011

Вам когда-нибудь нужно их искать? Я не эксперт по MySQL, но вам, возможно, придется прыгать через обруч, чтобы выполнить поиск.

Вас беспокоит HTML-код данных или кодировка символов?

Я бы сказал, постарайтесь не делать никакой специальной кодировки символов в БД, если вы можете избежать этого. Поиск, запоминание специальной обработки входящих и исходящих запросов и т. Д.

1 голос
/ 05 января 2011

Я бы не кодировал его в базе данных, если бы не было четкого и определенного значения для этого.Вы (и любой другой, кто когда-либо будет работать с данными) должны помнить, что при использовании этих данных следует избегать экранирования или экранировать любые данные, которые вы вставляете, обновляете или сравниваете с этим полем.Я не уверен, какая выгода от того, чтобы избежать этого, но, вероятно, оно того не стоит.

...