Php 将一个字符串从html文件中的表单传递到一个关于utf-8编码的python脚本

Php 将一个字符串从html文件中的表单传递到一个关于utf-8编码的python脚本,php,python,html,encoding,utf-8,Php,Python,Html,Encoding,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> 顺便说一下:index.html中有这一行

我将此表单保存在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>
顺便说一下:index.html中有这一行

<meta charset="utf-8" />

我希望听到更好的方法来管理我的任务或纠正我的方法。谢谢大家!

# -*- 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"))

应该可以正常工作

为什么不让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脚本,可能需要先对其进行编码,但通常使用以下不同方法进行检查: 我猜您只需要对字符串调用unicode()

wFile.write(unicode(sys.argv[1:]))

您可以直接将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/
。嗯,服务器可能也需要一些配置


最后3行是简单的http头。在我的示例中,它只是重定向到其他站点。没有可显示的内容。
getvalue(“a”,”)
将返回字段“a”的值或空字符串(第二个参数)。几乎是普通的Python文件。

PHP代码的实际问题似乎是添加到“command”中的参数“$add_user”没有以任何方式转义或保护。 这使得向“exec”发送任何信息成为可能,使系统容易受到攻击。webcomic XKCD有一个关于此问题的“有趣”示例:


您看到的原因是UTF-8编码的“åäö”以一个不可打印的字节开头,这在许多旧shell中会导致问题,具体取决于系统配置。

在python中,您发布的第一行强制使用utf8是否意味着每个字符串都将出现在utf8中,而不像python中的标准(unicode)?我试过你的代码,但没有解决问题。如果我是纯ascii字符串,它就可以工作。但是对于包含非ascii字符的字符串,它不起作用。我需要pyton脚本。“写入文件只是一个测试用例”,我想用python做更多的处理。什么是操作系统?什么是系统编码?我是网络编程新手。请你给我举个例子,你是如何通过CGI实现这个例子的?这个例子救了我一天!非常感谢你的例子。我想我会更深入地研究cgi编程。它似乎解决了比我迄今为止尝试的解决方法更多的问题。谢谢
wFile.write(unicode(sys.argv[1:]))
#!/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()