【问题标题】:Special characters appearing in HTML format以 HTML 格式出现的特殊字符
【发布时间】:2014-12-22 07:55:03
【问题描述】:

我有一个用 Perl、Apache 和 Mysql 开发的遗留应用程序。

应用程序中的某些部分显示字符的 HTML 代码。该问题与键盘上的以下字符有关:

  1. 分号
  2. 逗号
  3. 引号
  4. 小于符号
  5. 大于符号

存储这些数据的表本身也存储了这样的数据。该表是 CHARSET=latin1。

应用程序正在使用

<meta charset="utf-8" />

在 HTML 渲染中。

我的问题是“如何解决这个问题”?

  • 我应该对 DB 字符集进行一些更改吗? (我有多个 应用程序中出现此问题的位置和多个表 用于各个部分)
  • 我应该对 PERL DB 连接进行一些更改吗? (这看起来是处理问题的最佳位置,因为这对于使用 DB 交互的任何模块都是常见的)模块,以便它将解码/编码特殊字符。

还有其他建议吗?

【问题讨论】:

  • 数据如何存储在数据库中?是否有一些代码可以转换实际的用户输入,例如Ascii 撇号 (') 被转换为 &amp;#39:? (没有真正的理由这样做,但遗留代码经常做一些奇怪的事情。)数据库中的数据是如何插入到 HTML 文档中的?如果您只是插入&amp;#39:,它会显示为 Ascii 撇号,因此代码必须执行其他操作。
  • 可能代码的HTML渲染部分不知道数据库中的文本已经被特殊字符转义了;所以它会在渲染 html 之前再转义一次。
  • IMO 这是一个数据库问题:latin-1 字符集支持当前编码的实体,因此应将它们改回适当的字符,以便可以直接在数据库中查看信息而无需将&amp;#39; 转换为撇号等的任何心理体操。如果将数据库数据输出到某些实体确实需要编码的介质——例如到需要对&lt;&gt; 进行编码的网页——生成网页输出的代码应该进行这种转换。

标签: html mysql perl browser


【解决方案1】:

看起来不像是 DB 字符集问题,它看起来像 HTML 转义问题。看起来您在数据值中具有预转义的字符实体引用,这些引用通常不会被 HTML 浏览器转义,但它们位于文本框内并被转义。它们是如何渲染的?通过一些未正确呈现转义的 AJAX 代码?

https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML

【讨论】:

  • @ialarmedalien - 不确定你指的是什么。 Perl 遗留应用程序也有 AJAX。我只是假设如果该字段不是由浏览器呈现,如何填充该字段。 AJAX 是最可能的解释。我的回答只是我的最佳猜测。
猜你喜欢
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多