Esp32 Arduino 基于 SPIFFS 的静态 Web 地址区分大小写
Esp32 Arduino SPIFFS Based Static Web Addresses Case Sensitive
我正在尝试通过 PlatformIO 在 ESP32 上创建一个静态网络服务器。我正在使用 PlatformIO 中内置的 "Upload Filesystem" 任务来上传 www 文件夹。然后我使用 server.serveStatic("/", SPIFFS, "/www/");
来提供页面。问题是 url 是区分大小写的,我需要它们不区分大小写。
我认为这是由于底层 SPIFFS 文件系统造成的,要修复它,我应该以某种方式改变它。
假设您使用的是标准 ESP32 网络服务器库,您可以执行以下操作:
在你的处理函数中比较你得到的路径参数
webServer.uri()
这是一个字符数组然后使用 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 字符串)相同(除了大小写)。所以 url 请求像
www/Mysmallcapslink.html
www/MySmallCapsLink.html
都将由同一个处理程序处理。
关于 srtcasecmp 的信息:
DESCRIPTION The strcasecmp() function shall compare, while ignoring differences in case, the string
pointed to by s1 to the string pointed to by s2. The strncasecmp() function shall
compare, while ignoring differences in case, not more than n bytes from the string
pointed to by s1 to the string pointed to by s2.
strncasecmp() shall behave as if the strings had been converted to lowercase and then a
byte comparison performed.
RETURN VALUE Upon completion, strcasecmp() shall return an integer greater than, equal to, or less
than 0, if the string pointed to by s1 is, ignoring case, greater than, equal to, or
less than the string pointed to by s2, respectively.
我正在尝试通过 PlatformIO 在 ESP32 上创建一个静态网络服务器。我正在使用 PlatformIO 中内置的 "Upload Filesystem" 任务来上传 www 文件夹。然后我使用 server.serveStatic("/", SPIFFS, "/www/");
来提供页面。问题是 url 是区分大小写的,我需要它们不区分大小写。
我认为这是由于底层 SPIFFS 文件系统造成的,要修复它,我应该以某种方式改变它。
假设您使用的是标准 ESP32 网络服务器库,您可以执行以下操作: 在你的处理函数中比较你得到的路径参数
webServer.uri()
这是一个字符数组然后使用 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 字符串)相同(除了大小写)。所以 url 请求像 www/Mysmallcapslink.html www/MySmallCapsLink.html 都将由同一个处理程序处理。
关于 srtcasecmp 的信息:
DESCRIPTION The strcasecmp() function shall compare, while ignoring differences in case, the string pointed to by s1 to the string pointed to by s2. The strncasecmp() function shall compare, while ignoring differences in case, not more than n bytes from the string pointed to by s1 to the string pointed to by s2.
strncasecmp() shall behave as if the strings had been converted to lowercase and then a byte comparison performed.
RETURN VALUE Upon completion, strcasecmp() shall return an integer greater than, equal to, or less than 0, if the string pointed to by s1 is, ignoring case, greater than, equal to, or less than the string pointed to by s2, respectively.