Django admin 将 HTML 实体转换为它们的字符

Posted

技术标签:

【中文标题】Django admin 将 HTML 实体转换为它们的字符【英文标题】:Django admin converts HTML entities into their characters 【发布时间】:2013-08-04 02:24:40 【问题描述】:

我在 Django Admin 站点上遇到了一个奇怪的问题,我将 html 片段存储在一个文本字段中。

点击保存后,字段变为:

这很好——HTML 无论如何都能正确呈现。真正的问题是当我再次点击保存时:

所有 HTML 实体都受此错误影响,包括  

为什么会这样?


操作系统:Amazon Linux x64 Python:2.6 Django:1.4 数据库:mysql 5.5

【问题讨论】:

你到底想做什么? 作为一个字符串,我希望其中的 HTML 实体保持不变。 你想要做的是如果你把这个→留在→而不是在右箭头? 是的。 (这是预期的行为,不是吗?) 你的提议是众所周知的,我理解。但是,这是THE Django Admin site 特有的问题,其源代码在部署后超出了我的控制范围。我在询问 Stack Overflow 我的设置的任何部分是否引入了这种行为,因为不知道这个错误存在于所有平台上。 【参考方案1】:

您的问题是 Django 将您的数据插入为unicode,但您的 mysql 将其存储为latin_swedish

如果您不使用 South,只需使用 DROP DATABASE foo; 删除您的数据库。然后使用CREATE DATABASE foo CHARACTER SET UTF8; 重新创建它并再次运行syncdb

或者,您可以通过以下方式转换现有数据库:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE tablename CHARACTER SET utf8 COLLATE utf8_general_ci;

但是您必须为每个表手动应用它。虽然我认为可以只将它应用于您遇到问题的表。

确保在执行此操作之前备份您的数据。

【讨论】:

试过了,我认为我们正朝着正确的方向前进,但这与预期的完全相反:现在每种实体都转换为它的角色。正确的解决方案包括不显示 HTML 实体作为它们的代表字符。 其实我觉得我可能大错特错了。选择你的数据库后,你能做SHOW TABLE STATUS吗? Collation 行对您的表有何意义? latin1_swedish_ci,可能默认... 数据库是关键任务,所以在我们尝试之前我们必须稍等片刻。如果有效,肯定会报告! 又改了答案

以上是关于Django admin 将 HTML 实体转换为它们的字符的主要内容,如果未能解决你的问题,请参考以下文章

删除 Django admin 中的“添加”功能 [重复]

Java - 将命名的 html 实体转换为编号的 xml 实体

PHP怎么将HTML实体转换为普通字符

Django Admin:为两个管理站点使用不同的模板

将 HTML 实体转换为 Unicode,反之亦然

DJANGO - 将 POST 数据转换为 JSON 并部分呈现 HTML