0

可能重复:
如何在 C 中解码 HTML 实体?

这个问题与那个问题非常相似,但我需要在 C 中做同样的事情,而不是 python。以下是该函数应执行的一些示例:

input    output

&lt;     <
&gt;     >
&auml;   ä
&#x00DF; ß

该函数应具有签名 char *html2str(char *html) 或类似的签名。我不是从流中逐字节读取。

有我可以使用的库函数吗?

4

2 回答 2

2

没有标准的库函数可以完成这项工作。在开源世界中必须有大量可用的实现——几乎任何必须处理 HTML 的程序都会有一个。

问题有两个方面:

  1. 在源字符串中查找 HTML 实体。
  2. 在其位置插入适当的替换文本。

由于最短的实体是 '&x;' (但是,AFAIK,它们都在 & 和分号之间使用至少 2 个字符),您将始终缩短字符串,因为最长的 UTF-8 字符表示是 4 个字节。因此,可以安全地进行原位编辑。

在 Kernighan 和 Pike的“编程实践”中有一个 HTML 实体解码的说明,尽管它在某种程度上是“顺便”完成的。他们使用标记器来识别实体,并使用实体名称和替换值的排序表,以便他们可以使用二进制搜索来识别替换。这仅对非算法实体名称是必需的。对于编码为“ß”的实体,您可以使用算法技术对其进行解码。

于 2009-11-03T15:55:19.387 回答
0

这听起来像是一份工作flex。当然,flex 通常是基于流的,但您可以使用 flex 函数yy_scan_string(或其亲属)来更改它。有关详细信息,请参阅flex 手册:扫描字符串

Flex 的基本 Unicode 支持非常糟糕,但如果您不介意手动编码字节,它可能是一种解决方法。可能还有其他工具可以做你想做的事。

于 2009-11-03T15:45:17.643 回答