【问题标题】:C library for parsing query strings?用于解析查询字符串的 C 库?
【发布时间】:2011-06-02 18:52:33
【问题描述】:

我正在编写一个 C/CGI Web 应用程序。是否有一个库可以将查询字符串解析为GHashTable 之类的东西?我可以自己写,但似乎不值得重新发明轮子。

【问题讨论】:

    标签: c cgi query-string


    【解决方案1】:

    您可能会发现 Apache Portable Runtime (apr) 库中的 ap_getword 函数系列很有用。

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

    你可以在 google 上搜索"ap_getword(r->pool" "httpd.h" 并找到一些相关的源代码来学习。

    【讨论】:

      【解决方案2】:

      如果您真的在编写 C 并且知道键集,则最好将值存储在 struct 中,而不是一些臃肿的哈希表中。有一个static const 表:

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

      并使用它来解析查询字符串并填写结构。

      【讨论】:

      • +1 来自我,但是查找哈希表不会比遍历每个结构并比较字符串更快吗?
      • @Delan:对于最初查找类型/偏移量,哈希将比通过可能的键名进行线性搜索更有效。您可以对键名进行排序以获得对数时间,或者更好(因为键名列表是预先知道的)使用为它们选择的完美哈希。这提供了更好的性能、零内存使用(所有const 表)和更少的代码复杂度。
      【解决方案3】:

      uriparser 库可以将query strings 解析为键值对。

      【讨论】:

      • 谢谢!作为对我的额外奖励,Ubuntu 存储库方便地包括 liburiparser1/liburiparser-dev。
      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多