0

我正在尝试通过 PlatformIO 在 ESP32 上创建一个静态网络服务器。我正在使用 PlatformIO 中内置的“上传文件系统”任务来上传 www 文件夹。然后我用它server.serveStatic("/", SPIFFS, "/www/");来服务页面。问题是 url 区分大小写,我需要它们不区分大小写。

我认为这是由于底层的 SPIFFS 文件系统,为了修复它,我应该以某种方式改变它。

4

1 回答 1

1

假设您使用的是标准 ESP32 网络服务器库,您可以执行以下操作:在您的处理程序函数中,比较您获得的路径参数

webServer.uri()

这是一个 char 数组,然后使用 int strcasecmp(const char *s1, const char *s2); 功能部分是

if (strcasecmp (webServer.uri(), "www/mysmallcapslink.html") == 0) {
... do your stuff here ...
e.g. serve the file
}

注意 == 0 表示两个字符串(带有小 s 的 C 字符串)是相同的(除了大小写)。因此,像 www/Mysmallcapslink.html www/MySmallCapsLink.html 这样的 url 请求都将由同一个处理程序处理。

srtcasecmp的相关资料:

描述 strcasecmp() 函数将在忽略大小写差异的情况下比较 s1 指向的字符串与 s2 指向的字符串。strncasecmp() 函数应在忽略大小写差异的情况下比较 s1 指向的字符串与 s2 指向的字符串的不超过 n 个字节。

strncasecmp() 应该表现得好像字符串已被转换为小写,然后执行字节比较。

返回值 完成后,如果 s1 指向的字符串大于、等于或小于 s2 指向的字符串,则 strcasecmp() 将返回一个大于、等于或小于 0 的整数,忽略大小写, 分别。

于 2020-02-27T08:15:13.630 回答