Navegando na web, encontro duas abordagens para armazenar dados em bancos de dados.
Abordagem 1:
armazenar dados no banco de dados com os caracteres especiais html higienizados
$userdata = $_POST['field'];
store_in_db_via_PDO(htmlspecialchars($userdata), 'field');
display_on_page(get_from_db('field'));
Abordagem 2:
Armazene os dados o mais brutos possível no banco de dados e limpe na exibição:
$userdata = $_POST['field'];
$store_in_db_via_PDO($userdata, 'field');
display_on_page(htmlspecialchars('field'));
BTW, não estou falando sobre ataques sqlinjection, eles são 'capturados' pelo driver PDO
Existe um padrão da indústria para armazenamento de dados, que não deve incluir código html, em um banco de dados?
Eu geralmente armazenaria dados em sua forma mais pura.
Você deve verificar os dados enquanto os lê antes de enviá-los para o cliente de qualquer maneira, caso um bug em outro lugar tenha permitido que dados malformados (acidental ou maliciosamente) fossem adicionados ao banco de dados, escapando dos dados no caminho in não economiza nenhum processamento significativo na saída.
Armazenar os dados puros também evita muitos problemas se você encontrar um bug na rotina de codificação ou mudar de ideia sobre como deseja que as coisas sejam codificadas (provavelmente não é um problema aqui, pois você está trabalhando com um padrão predefinido com texto HTML, mas bons hábitos são mais fáceis de manter se você os usa religiosamente, mesmo quando não fazem diferença). Se você alterar seu padrão de codificação, os dados armazenados puros não precisam ser tocados, mas os dados codificados existentes precisam ser lidos, decodificados, recodificados usando as novas regras e salvos novamente.