将HTML表单中的字符串传递给Python脚本并遵循UTF-8编码
我在一个index.html文件里有一个表单。
<form method="post" action="index.php" accept-charset="UTF-8">
<input id="a" name="a" type="text">
<input type="submit" name="run_query" value="Add User" size="30">
</form>
我想把文本输入作为参数传递给一个Python脚本,所以我在index.html文件里嵌入了以下的PHP代码:
<?
session_start();
ob_start();
if(isset($_REQUEST['run_query'])) {
$add_user = $_REQUEST['a'];
$command = "add_author.py $add_user";
exec($command);
}
?>
我把add_author.py文件放在和index.html同一个文件夹里。用任何字符串都能正常工作。但是如果我尝试使用包含ä、ö、é这些字符的字符串,就不行了。
这个Python文件看起来是这样的。
import sys
import codecs
if __name__ == '__main__':
wFile = codecs.open("test.txt", "w", "utf8")
wFile.write(" ".join(sys.argv[1:]))
wFile.close()
顺便提一下:index.html里有这一行。
<meta charset="utf-8" />
我很想听听更好的方法来处理我的任务,或者对我现在的方法进行纠正。谢谢!
4 个回答
0
# -*- coding: utf-8 -*-
在你的文件顶部应该强制使用utf编码。
# -*- coding: utf-8 -*-
import sys
if __name__ in '__main__':
with open('test.txt','w') as out:
out.write(''.join(sys.argv[1:]).encode("utf-8"))
这样应该可以正常工作。
1
为什么不让PHP直接写入文件,而是去调用另一个Python脚本呢?
if (!$handle = fopen("test.txt", 'a')) {
echo "Cannot open file ($filename)";
exit;
}
if (fwrite($handle, $_REQUEST['a']) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
如果你坚持要使用Python脚本,可能需要先对它进行编码,但一般来说,可以参考这里提到的不同方法:http://docs.python.org/howto/unicode.html。我猜你只需要对字符串调用unicode()函数就可以了。
wFile.write(unicode(sys.argv[1:]))
0
你可以直接用Python来做CGI,这样比从PHP调用Python要快,而且配置起来也更简单。
这里有个简单的例子。
#!/usr/bin/python
import cgi;
import codecs;
form = cgi.FieldStorage()
my_a = form.getvalue("a","")
wFile = codecs.open("test.txt", "w", "utf8")
wFile.write(my_a);
wFile.close()
print("Content-Type: text/plain")
print("Location: ../plain.html")
print()
你需要把这个Python文件放到CGI脚本的目录里。最常见的目录是/cgi-bin/
。不过,服务器可能也需要一些配置。
最后三行是简单的HTTP头部。在我的例子里,它只是把你重定向到另一个网站,并没有内容要显示。getvalue("a","")
这个函数会返回字段"a"的值,或者返回空字符串(第二个参数)。总的来说,这几乎就是一个普通的Python文件。