我是新手,使用Apache Tomcat服务器和Python 2.7 CGI脚本。
出于测试目的,我正在进行一些编码,但是我收到以下错误:
未声明纯文本文档的字符编码。 该文档将在某些浏览器中使用乱码文本进行渲染 如果文档包含来自外部的字符,则配置 US-ASCII范围。文件的字符编码需要 在传输协议或文件中声明需要使用字节顺序 标记为编码签名
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
print "Content-Type: text/html; charset=utf-8\n\n"
print "<html>"
print "<head>"
# print "<meta content='text/html;charset=utf-8' http-equiv='Content-Type'>"
# print "<meta content='utf-8' http-equiv='encoding'> "
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name) "
print "</body>"
print "</html>"
我的HTML表单:
<form action="/cgi-bin/webs.py" method="post">
First Name: <input type="text" name="first_name"> <br />
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>
答案 0 :(得分:1)
您应该在HTML文档中放置一个正确的meta http-equiv="Content-Type"
(包含表单的页面和CGI脚本生成的HTML)。例如
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
您的脚本中似乎有一对此类<meta>
标记,但它们都被注释掉了...
请注意,如果您声明charset
是UTF-8,那么您应该确保实际的文档编码为UTF-8。如果它们只包含普通的ASCII安全字符,则不需要执行任何操作,因为这些字符的UTF-8版本与其ASCII代码相同。
顺便说一句,如果您已经在Apache中正确设置了路径,则表单/cgi-bin
属性中不需要action
。
我刚测试了你的Python CGI脚本和一个包含你的表单的正确HTML文件。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>CGI test</title>
</head>
<body>
<form action="cgi-bin/qwebs.py" method="post">
First Name: <input type="text" name="first_name"> <br>
Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
</form>
</body>
</html>
#! /usr/bin/env python
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
print "Content-Type: text/html; charset=utf-8\r\n\r\n"
print "<html>"
print "<head>"
print "<meta content='text/html;charset=utf-8' http-equiv='Content-Type'>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"
我使用了Python的简单Web服务器:
python -m CGIHTTPServer
默认情况下在端口8000上运行,我将CGI脚本放在当前目录的cgi-bin
文件夹中。
一切都按预期工作。所以我怀疑你需要修复你的Apache配置。确保您的CGI路径正确,并且您已将.py
个文件称为CGI。