将html实体存储在数据库中?或者在检索时转换?

Dou*_*las 25 php mysql

快速提问,在将数据插入数据库之前或之后调用htmlentities()(或htmlspecialchars())是一个更好的主意吗?

之前:新的较长字符串将导致我必须更改数据库以在字段中保存更长的值.(maxlength="800"可以更改为804字符串)

之后:这将需要更多的服务器处理,并且htmlspecialchars()可以在每次页面加载或AJAX加载时进行数百次调用.

SOOO.检索结果时转换会显着减慢我的代码吗?我应该更换数据库吗?

pix*_*x0r 33

我建议将最原始形式的数据存储在数据库中.在选择输出数据的方式和位置时,这为您提供了最大的灵活性.

如果您发现性能有问题,可以以某种方式缓存此数据的HTML格式版本.请记住,过早优化是一件坏事.


blo*_*art 11

我没有PHP的经验但通常我总是转换或逃离最接近输出.您不知道输出要求何时会发生变化,例如您可能希望将数据吐出为XML或JSON数组,因此转换为HTML然后存储意味着您仅限于将数据用作HTML.


Ian*_*Ian 7

在php/MySQL Web应用程序中,数据以两种方式流动

数据库 - >脚本语言(php) - > HTML输出 - >浏览器 - >屏幕和键盘 - >浏览器 - > $ _POST - > php - > SQL语句 - >数据库.

数据定义为用户提供的所有内容.

始终总是......

A)当你将它移动到SQL语句中时,通过mysql_real_escape_string处理数据,并且

B)在将数据移动到HTML输出时通过htmlspecialchars处理数据.

这将保护您免受SQL注入攻击,并使html字符和实体正确显示(除非您设法忘记一个地方,然后您已经打开了一个安全漏洞).

我是否提到必须对任何用户可能通过脚本触摸,更改或提供的每一条数据进行此操作?

ps出于性能原因,请在任何地方使用UTF-8编码.