将html实体转换为c中的unicode(utf-8)字符串?

时间:2009-09-12 15:09:19

标签: html c unicode html-entities

  

可能重复:
  How to decode HTML Entities in C?

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

input    output

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

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

我可以使用库函数吗?

2 个答案:

答案 0 :(得分:2)

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

问题有两个方面:

  1. 在源字符串中查找HTML实体。
  2. 在其位置插入适当的替换文字。
  3. 因为最短的实体是'&amp; x;' (但是,AFAIK,它们在&符号和分号之间至少使用2个字符),因为最长的UTF-8字符表示是4个字节,所以你总是缩短字符串。因此,可以安全地原位编辑。

    Kernighan和Pike在'The Practice of Programming'中有一个HTML实体解码的例子,尽管它在某种程度上已经过时了。他们使用标记器来识别实体,并使用实体名称的排序表加上替换值,以便他们可以使用二进制搜索来识别替换。这仅适用于非算法实体名称。对于编码为“ß”的实体,您使用算法技术对其进行解码。

答案 1 :(得分:0)

这听起来像是flex的工作。当然,flex通常是基于流的,但您可以使用flex函数yy_scan_string(或其亲属)来更改它。有关详细信息,请参阅The flex Manual: Scanning Strings

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