解析查询字符串的C语言库?

5

我正在编写一个C/CGI Web应用程序。是否有一个库可以将查询字符串解析成类似于GHashTable的东西?我可以自己编写,但显然没有必要重复造轮子。

3个回答

3

2
谢谢!对于我来说,Ubuntu代码库中包含的liburiparser1/liburiparser-dev是额外的奖励。 - Delan Azabani

2
如果你确实在编写C代码并且键的集合是已知的,那么最好将值存储在一个struct中,而不是一些臃肿的哈希表中。有一个static const表格包括:

  • 键名
  • 类型(整数/字符串可能足够了)
  • 在结构体中的偏移量(使用offsetof宏)

然后使用它来解析查询字符串并填充结构体。


我给你点个赞,但是使用哈希表查找会比遍历每个结构体并比较字符串更快吧? - Delan Azabani
@Delan:对于最初查找类型/偏移量,哈希比线性搜索可能的键名更有效。您可以对键名进行排序以获得对数时间,或者更好的是(因为预先知道键名列表),使用为它们选择的完美哈希。这提供更好的性能、零内存使用(所有const表)和更少的代码复杂性。 - R.. GitHub STOP HELPING ICE

0

您可能会发现来自Apache Portable Runtime(apr)库的ap_getword函数族很有用。

大多数字符串解析例程属于ap_getword*系列,它们一起提供类似于Perl split()函数的功能。该系列的每个成员都能从字符串中提取一个单词,将文本拆分为分隔符(如空格或逗号)。与Perl split()不同的是,在其中整个字符串一次性拆分并将片段作为列表返回,而ap_getword*函数逐个单词操作。每次调用函数时,它都会返回下一个单词,并通过增加指针来跟踪其位置。

您可以搜索谷歌"ap_getword(r->pool" "httpd.h",并找到一些相关的源代码进行学习。


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