在 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;
}
这个例子对我来说很好用:
#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;
}