在 C 中使用 FastCGI 的 HTML5 / UTF 8 (fcgi_stdio.h)

HMTL5 / UTF8 using FastCGI in C (fcgi_stdio.h)

这个例子对我来说很好用:

#include "fcgi_stdio.h"

int main(void) {

while(FCGI_Accept() >= 0) {

    //Standard FastCGI Example Web-page
    printf("Content-type: text/html\r\n"
        "\r\n"
        "<title>FactCGI Example</title>"
        "<h1>Example Website</h1>"
        "Some text...\r\n");

    FCGI_Finish();
}

return 0;
}

但是因为我的网页需要 UTF8 字符,所以我想我应该使用 html5 来格式化网页。这是我的骨架,可以作为独立文件呈现:

<!DOCTYPE html>
<html>

<head>
<title>FactCGI Example</title>
</head>

<body>
<h1>Example Website</h1>
<p>Some text...</p>
</body>

</html>

但是当如下将其折叠到 fcgi 脚本中时,我在脚本加载时得到一个 'Internal Server Error'。

#include "fcgi_stdio.h"

int main(void) {

while(FCGI_Accept() >= 0) {

    //Using html5 for the web-page
    printf("<!DOCTYPE html>\r\n"
        "<html>\r\n"
        "\r\n"
        "<head>\r\n"
        "<title>FactCGI Example</title>\r\n"
        "</head>\r\n"
        "\r\n"
        "<body>\r\n"
        "<h1>Example Website</h1>\r\n"
        "<p>Some text...</p>\r\n"
        "</body>\r\n"
        "\r\n"
        "</html>\r\n");

    FCGI_Finish();
    }

return 0;
}

Fedora 23、httpd 2.8.18、Firefox 43.0.3、gcc 5.3.1-2

谷歌搜索所有fcgi,网页以"Content-type: text/html"开头。

是我犯了一些愚蠢的错误还是 fcgi 不支持 html5?

是否有其他方法可以使用 fcgi 启用 UTF8 支持?

错误可能是因为您的输出中没有 Content-type HTTP header。另外,如果你想使用 UTF-8,那么你应该在 Content-type header 中指定 UTF-8 作为字符集。但是你不需要使用HTML5来在你的网页中使用UTF-8;该编码也可以用于旧的 HTML 版本。

这是添加了 Content-type header 和 UTF-8 参数的代码。

#include "fcgi_stdio.h"

int main(void) {

while(FCGI_Accept() >= 0) {

    //Using html5 for the web-page
    printf("Content-type: text/html charset=utf-8\r\n"
        "\r\n"
        "<!DOCTYPE html>\r\n"
        "<html>\r\n"
        "\r\n"
        "<head>\r\n"
        "<title>FactCGI Example</title>\r\n"
        "</head>\r\n"
        "\r\n"
        "<body>\r\n"
        "<h1>Example Website</h1>\r\n"
        "<p>Some text...</p>\r\n"
        "</body>\r\n"
        "\r\n"
        "</html>\r\n");

    FCGI_Finish();
    }

return 0;
}