来自标准Haskell库的XHTML可能无效?

4

我正在尝试解决一个问题,即使用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相同的映射。

由于我是新手,可能犯了错误。另外,我知道HTML5放宽了这些属性限制,但目前没有普及。这个库有缺陷吗?如果是,应该使用哪种映射来替换给定的映射?

参见Xhtml Invalid Characters?


好的。我想给他们一个现成的解决方案。我可以使用什么一对一映射?另一种语言中已经有解决方案了吗? - RStephan
如果它无效,那可能是因为äöü不是有效的ID字符(我不知道它们是否有效),而不是因为&#;无效,对吧? - dave4420
是的,我假定UTF-8作为ID是无效的。但是,&,#和分号也是如此,因此正常的URI转义机制是不够的。 - RStephan
1个回答

7

ID中可以使用许多非ASCII Unicode字符(见Name产生式),包括带重音符号的字母。

请注意,规则适用于标准化之后

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

因此,我认为这不是库中的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接