需要检查查询字符串之前是否存在任何扩展名

时间:2016-06-10 09:00:02

标签: c string url query-string

我已编写代码来检查query string

Logic ::如果query string"?",则应删除query string中的所有字符并打印vailid URL

        char str[] = "http://john.org/test.mp4?iufjdlwle";
        char *pch;
        pch = strtok(str,"?");
        printf("%s\n",pch);  

输出:

  bash-3.2$ ./querystring
  http://john.com/test.mp4

但我必须再检查一下

  1. 只有在查询字符串之前存在任何扩展名时才需要获取URL
  2. 如果在查询字符串之前没有扩展名,则需要跳过。
  3. 我试过这种方式,     继续编码

            char *final;
            final = pch+(strlen(pch)-3);
            printf("%s\n",final);
    
            if(strcasecmp(p,"mp4"))
                    printf("falure case\n");
            else
                    printf("Success case\n");
    

    它仅适用于.mp4扩展。  如果我将*.mpeg*.m3u8*.flv作为附加信息,则会失败。

    有人可以指导我如何解决这个问题并使其有效吗?

1 个答案:

答案 0 :(得分:2)

查询字符串是在问号?之后开始的,很好。

您应该尝试定义扩展名是什么。对我来说,这是在url的最后一个组件中的点(.)之后可能发生的事情,其中​​组件用斜杠分隔(/

所以你应该这样做:

  • 首先删除包含初始?
  • 的可能查询字符串
  • 然后找到最后一个/
  • 然后找到最后.
  • 之后发生的最后/

如果找到一个,那么它就是扩展的起点。

因此假设pch包含没有任何查询字符串的url,您可以执行以下操作:

char * ix = strrchr(pch, '/');
if (ix == NULL) {
    // an URL without / is rather weird, better report and abort
    ...
}
ix = strrchr(ix, '.');
if (ix == NULL) {
    // no extension here: ignore the url
    ...
}
else {
    // found an URL containing an extension: process it
    // ix+1 points to the extension
    ...
}