我有一个小的PHP脚本,它接受一个POST变量并将其写入文件。
<?php
$fileContents = $_POST["Contents"];
$fileName = $_POST["Name"];
$filePath = $_POST["Path"];
$passcode = $_POST["Passcode"];
if ($passcode != "<passcode>")
die();
if (!is_dir("./upload/$filePath"))
mkdir("./upload/$filePath", 0755, true);
$file = "./upload/$filePath" . $fileName;
$fd = fopen($file, "w");
fwrite($fd, $fileContents);
fclose($fd);
?>
这对于给出的大多数文本似乎都可以正常工作,但如果给出包含百分号(%)的文本,则会出现以下奇怪现象:
fivice = getField( %bind, 0 );
原文是:
%device = getField( %bind, 0 );
我使用以下服务器请求发送POST请求:
POST path/to/Upload.php HTTP/1.1\nHost: host.com\nContent-Type: application/x-www-form-urlencoded\nContent-Length: <length>\n\n<file data>\n
在许多其他情况下也会出现这种情况,但正如您所看到的,不是使用%bind 我寻找原因并在%%上找到了一些东西,所以我尝试了一个%% - escaper并得到了这个:
%fivice = getField( %%bind, 0 );
有没有办法解决这个%问题?此外,%问题是php问题还是请求问题?
编辑:我尝试使用urlencode / urldecode,但这些都无法解决问题。这也发生在file_put_contents
,所以我开始认为这是一个上传问题。
答案 0 :(得分:1)
解决问题的方法是对文字进行网址编码,然后将%
转换为%25
。您需要调查它需要编码的位置(或者为什么它首先不编码)。
>>> u'fi'.encode('macroman')
'\xde'
答案 1 :(得分:0)
您是否可以在字符串中应用urldecode? URL编码字符看起来像一个百分比后跟两个数字,但也许那些可以是十六进制。 d
和e
都是十六进制数字..
%de可能是字符fi。