【问题标题】:possibly invalid XHTML from a standard Haskell library?可能来自标准 Haskell 库的 XHTML 无效?
【发布时间】:2011-11-23 03:13:46
【问题描述】:

我正在尝试解决使用 Haskell 从 UTF-8 文本生成 XHTML 的程序的问题。该程序接受该文本的字符串,并应生成有效的 XHTML 实体,但不会。我正在导入 Text.XHtml.Transitional,并使用函数 href 和 identifier 从 UTF-8 字符串生成 URI 和 ID 属性。使用 Haskell 解释器我们可以看到:

Prelude Text.XHtml.Transitional> href "äöü"
href="äöü"

这很好,是一个有效的 XHTML URI。然而,

Prelude Text.XHtml.Transitional> identifier "äöü"
id="äöü"

不是,根据规范,它不允许使用 '&'、'#' 和 ';'人物。 因此,Text.XHtml.Transitional 库似乎有问题。此外,我认为即使是 XHMTL 也很糟糕,因为它既没有在属性中提供 UTF-8 的 1:1 映射,也没有提供与用于 URI 的映射相同的映射。

由于我是 Haskell 的新手,我可能在某个地方犯了错误。另外,我知道 HTML5 放宽了这些属性限制。但这并不占主导地位。图书馆有问题吗?如果是这样,哪个映射应该替换给定的映射?

另见Xhtml Invalid Characters?

【问题讨论】:

  • 好的。我想给他们一个现成的解决方案。我可以使用哪些 1:1 映射?是否已经有另一种语言的解决方案?
  • 如果无效,那是因为ä,ö`和ü作为ID字符无效(我不知道它们是否有效),而不是因为@ 987654326@、#; 肯定是无效的吗?
  • 是的,我假设 UTF-8 作为 ID 无效。但 &, #, ;也一样,所以普通的 URI 转义机制是不够的。

标签: html haskell xhtml


【解决方案1】:

Plenty of non-ascii unicode characters are valid in IDs(参见Name 制作),包括您的重音字母。

注意the production applies after normalisation

&#; 可能不会出现在 ID 中,但在您的示例中,它们不会出现在 ID 中 --- ID 是 äöü。然后将其编码为 äöü,大概是为了在输出为 US-ASCII 或 ISO-8859-1 时保留下来。

所以我认为这不是库中的错误。

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多