Encoding 我们是否应该在将特殊字符存储到数据库之前对其进行HTML编码?

Encoding 我们是否应该在将特殊字符存储到数据库之前对其进行HTML编码?,encoding,character-encoding,special-characters,Encoding,Character Encoding,Special Characters,我使用MySQL存储数据,我的网页都编码为UTF-8。我有很多葡萄牙语字符,比如ç和õ,我想知道是否应该在存储之前对它们进行HTML转义 我们是否应该将和存储为&?为什么?优点和缺点/最佳做法是什么?您是否需要搜索它们?我不是MySQL的专家,但你可能需要跳转才能进行搜索 您是否关心数据的HTML特性或字符编码 我想说,如果可以避免的话,尽量不要对数据库中的字符进行任何特殊编码。搜索、必须记住特殊的入/出绑定处理等。不要在存储之前对字符进行HTML编码。您应该尽可能纯地存储数据。HTML编

我使用MySQL存储数据,我的网页都编码为UTF-8。我有很多葡萄牙语字符,比如
ç
õ
,我想知道是否应该在存储之前对它们进行HTML转义


我们是否应该将
存储为
&?为什么?优点和缺点/最佳做法是什么?

您是否需要搜索它们?我不是MySQL的专家,但你可能需要跳转才能进行搜索

您是否关心数据的HTML特性或字符编码


我想说,如果可以避免的话,尽量不要对数据库中的字符进行任何特殊编码。搜索、必须记住特殊的入/出绑定处理等。

不要在存储之前对字符进行HTML编码。您应该尽可能纯地存储数据。HTML编码是必需的,因为您要在HTML页面上显示数据,所以在处理数据以创建页面的过程中也要进行编码。例如,假设您决定还将以纯文本电子邮件的形式发送数据。如果您已经对数据进行了HTML编码,那么现在HTML编码是您必须撤销的障碍


为您的数据选择一个规范形式,并将其存储。UTF-8非常棒,您的数据库支持它(假设您已经正确创建了所有表)。只存储UTF-8。

除非有明确的值,否则我不会在数据库中对其进行编码。您(以及任何其他将使用该数据的人)必须记住在使用该数据时取消转义,或者转义您插入、更新或比较该字段的任何数据。我不知道逃避它有什么好处,但可能不值得。如果你每次写100或1000页的页面演示,那么在写的过程中编码会更有效。但在大多数情况下,我想这种差别可以忽略不计


但是其他原因(不编码)是好的,毫无疑问——而且不管怎样,编码UTF-8喜欢的字符是没有意义的。

出于数据库的目的,不建议使用HTML编码和存储数据。这样做将使数据仅用于在HTML页面上呈现(一个目的)和需要再次解码的所有其他操作(许多)。这会降低数据库的数据一致性(因为有效性、准确性和可用性受到影响)。

我认为,在进入数据库的过程中进行编码实际上是一种安全风险,因为这意味着您可能不会在数据库和浏览器之间进行编码(因为这会导致双重编码)。这意味着,如果现在或将来存在未编码数据进入数据库的路由,则该路由将未编码发送到浏览器。最好在数据库和浏览器之间进行编码,从而存储未编码的IMHO

很好。我还没有想到这一点,因为我还没有实现搜索。我的软件还在开发初期。但答案是肯定的,我需要搜索它们。在这种情况下编码它们会导致问题吗?阅读您的评论,我想我必须在发送查询之前对搜索字符串中的字符进行编码!我想是的,即使这样,您也会遇到“近似匹配”的问题。我更熟悉SQL Server,它具有通配符匹配(“类似“-SQL标准”),这可能会在编码方面出现问题。ç和õ是UTF-8字符。如果DB支持它们,并且您的页面已经编码为UTF-8,那么为什么要转换呢?因为我习惯于阅读关于逃避这些内容的文章,所以我认为这是标准做法,显然不是!我同意。这是PHP的“魔术引号”功能的HTML等价物。这不是一个好主意,因为并非所有数据都需要转义&;看到转义数据出现在不应该出现的地方是很烦人的。不是一样吗,相反?当您需要对未编码的HTML进行编码时,它是一个障碍?I.m.o.您更可能需要输出编码的HTML。在少数需要解码的情况下,您可以对其进行解码。开发人员忘记解码比编码更安全,对吗?数据使用的位置可能很多,因此开发人员忘记编码的风险是真实存在的。我个人认为这个问题没有答案。也同意@feskr的观点,如果我们忘记编码比解码更危险(如果开发人员忘记解码,它将在开发过程中被捕获)。IMO只是基于您自己的场景,无论您是否需要存储编码/安全字符串,并在需要时解码,还是以其他方式进行解码,都可以打电话。