FieldStorage 输入删除了一些字符

FieldStorage input removes some characters

在输入框中输入 "c++",我的 Python 脚本只接收 "c"。

这是 HTML 代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
    <input id="inputtxt" type="text">&nbsp;
    <a onclick="window.location='escapetest.py?q='+document.getElementById('inputtxt').value;">Go!</a>
</body>
</html>

以及接收请求的 python 脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cgitb; cgitb.enable()

from cgi import FieldStorage


inputstr = FieldStorage()["q"]

print "Content-Type: text/html; charset=utf-8"
print
print inputstr.value

输出为:

c

运行 Python 2.7 (x64) 并使用 Firefox。

你没有正确地转义你的价值; URL-encoded query value 中的 + 字符是 space 的编码值,因此您实际上正在打印:

"c  "

一个 c 有两个 space。使用 encodeURIComponent() function 正确转义输入值,其中 spaces 将被 + 替换, + 将被 %2B 替换,因此 Python 可以将其解码回 +:

<a onclick="window.location='escapetest.py?q='+encodeURIComponent(document.getElementById('inputtxt').value);">Go!</a>