【问题标题】:Parse url query parameters in C glib?在 C glib 中解析 url 查询参数?
【发布时间】:2019-09-03 00:08:04
【问题描述】:

glib下是否可以在C中获取URL片段参数?

我有一个类似file://localhost/home/me/notepad.txt#line=100,2的网址

获取url末尾指定参数的最佳方法是什么?

【问题讨论】:

  • GLib 文档的relevant section 建议不要;至少不是在一个方便的为你做的功能中。
  • 干杯,我猜他们只是实现了他们需要的东西 - 看起来有点奇怪,那里什么都没有。

标签: c parsing url glib


【解决方案1】:

没有单一的 GLib 函数可以满足您的需求。如果您可以使用 libsoup(也是 GNOME 堆栈的一部分),那么您可以使用 SoupURI

g_autoptr(SoupURI) uri = soup_uri_new (uri_string);
const gchar *fragment = soup_uri_get_fragment (uri);

这会将fragment 设置为line=100,2。无论您的片段格式是什么,您都必须手动进一步解析。 g_strsplit() 对此很有用。

【讨论】:

    【解决方案2】:

    您还可以查看 gnome-terminal terminal-nautilus.c 文件中的函数 parse_sftp_uri。 它可以很容易地适应一般的 URI。

    【讨论】:

      【解决方案3】:

      不确定您是要解析 notepad.txt#line=100,2 还是 #line=100,2,但我的答案应该适用于这两种情况。

      您可以使用strrchr() (man strrchr) 函数来获取字符串中字符的最后一次出现。

      类似:

      char *file;
      file = strrchr(url, '/') + 1;
      

      【讨论】:

      • 如果片段本身包含/,这将不起作用。
      • 我认为 URL 中不能有“/”,否则它不是参数
      • RFC 3986 明确允许片段中的/(和?)。片段的语法是fragment = *( pchar / "/" / "?" )
      • 这至少可以说有点令人惊讶,我正在做 SEO 并且必须解析数百万个 URL 以进行分析,并且不记得曾经遇到过这个问题。我想我只是幸运 :) 感谢您指出这一点!
      • 嗨,我要提取的是line=100,2
      猜你喜欢
      • 1970-01-01
      • 2017-10-13
      • 2012-01-19
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多