multipart form-data不允许撇号?

时间:2012-09-16 04:38:38

标签: php forms

我正在使用以下表单代码:

<form enctype="multipart/form-data" action="process.php" method="POST">
 <input type="text" name="draftTitle"/>
 <textarea name="draftText" class="draftText"></textarea>
 <input type="file" name="uploadfile"/>
 <button class="draftSubmit">Add</button>
</form>

正如您所见,表单包含文本和文件的字段。当我在textarea中提交带有撇号的表单时,没有提交任何内容。在process.php中,我正在剥离斜线并正确清理POST数据,但似乎问题与来自enctype有关。关于如何防止撇号弄乱语法的任何想法?

更新:这是表单中的输出:

-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="MAX_FILE_SIZE"\r\n\r\n4000000\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="userID"\r\n\r\n2\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="lineID"\r\n\r\n1\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="draftTitle"\r\n\r\nThis is my title\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="uploadfile";
filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="draftText"\r\n\r\nIt's my description with an apostrophe in it.\r\n-----------------------------276443266232757--\r\n

正如您将看到的还有一些额外的字段。我在上面删除它们以简化问题。

更新

我正在使用以下代码插入数据库。

$query = "INSERT INTO posts (line_id, user_id, stamp_title, element, type) VALUES ('$line_id', '$user_id', '$stamp_title', '$data', '$type')";
mysql_query($query);

解决: 的 我添加了mysql_real_escape_string并且它有效。感谢所有帮助过的人!

$data = mysql_real_escape_string($data);

2 个答案:

答案 0 :(得分:3)

如果您的表单提交是:

-----------------------------276443266232757
Content-Disposition: form-data; name="MAX_FILE_SIZE"

4000000
-----------------------------276443266232757
Content-Disposition: form-data; name="userID"

2
-----------------------------276443266232757
Content-Disposition: form-data; name="lineID"

1
-----------------------------276443266232757
Content-Disposition: form-data; name="draftTitle"

This is my title
-----------------------------276443266232757
Content-Disposition: form-data; name="uploadfile"; filename=""
Content-Type: application/octet-stream


-----------------------------276443266232757
Content-Disposition: form-data; name="draftText"

It's my description with an apostrophe in it.
-----------------------------276443266232757--

哪个非常好,你的撇号就在那里。

然而,从此到:

$query = "INSERT INTO posts (line_id, user_id, stamp_title, element, type) VALUES ('$line_id', '$user_id', '$stamp_title', '$data', '$type')";
mysql_query($query);

似乎是问题,因为你在SQL插入中使用了撇号。您应该在每个输入变量上调用mysqli_real_escape_string()PDO::quote()(如果您有该扩展名)。

答案 1 :(得分:1)

我的观察是,这不是PHP的问题,而是使用其余代码将值放在数据库或文件中。请发布该代码。

我假设您正在向MySql数据库插入值。为了帮助它,您可以在插入之前尝试Mysql_real_escape_string函数为mysql做准备。