我有一个小的 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 );
The original text was:
%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。
我寻找了原因,并在%%上找到了一些东西,所以我尝试了一个%%-转义器并得到了这个结果:
%fivice = getField( %%bind, 0 );
有没有办法修复这个%问题?此外,百分号问题是php问题还是请求问题?
编辑:我尝试使用urlencode / urldecode但都无法解决该问题。在file_put_contents
中也出现了这个问题,所以我开始认为这是一个上传问题。
getField
是什么?