所以完整的场景是,我正在制作一个看起来像 w3schools “自己尝试!”的 Web 应用程序。选项。但现在离开安全性并制作 Web 应用程序的核心部分。
我的逻辑是:
- 使用 textarea 从用户那里获取输入,并在 ajax 请求中使用 POST 方法发送该数据。
- 现在在一个 PHP 文件(ajax 向该文件发送请求)中,我正在将发布的内容写入另一个 PHP 文件,并使用系统函数执行该 PHP 代码并再次将生成的 html 写入 .htm 文件。
- 现在在发送ajax请求的文件(第一个文件)中,我在javascript中使用.htm文件输出的iframe并刷新它。
问题是:
对于包含回显、系统功能的代码,一切正常。但是当我们使用像“+”这样的符号时,发布的数据正在转换为 html url 解码。
<?php
echo "Hello, world";
?>
上面的代码工作正常。
<?php
$a = 10;
$b = 20;
echo $a+$b;
?>
它不工作。上面的代码是在 PHP 写入文件(我从 POST 数据写入)中检查时,它的写法如下:
<?php
$a = 10;
$b = 20;
echo $a $b;
?>
'+' 符号正在转换为空格。我猜数据被解码成普通的html实体。整个事情是否有更好的逻辑以及如何解决这个问题。请帮帮我。
使用 ajax 请求发送 textarea 代码的文件:
<title>Html Black Box</title>
<style>
textarea{
font-family: courier; font-size: 15px; height: 100%; width: 100%;}
input {width: 100%; height: 100%; font-size: 40px;}
iframe {width: 100%; height: 100%; }
</style>
<script>
function update(){
document.getElementById('tdop').innerHTML = "<img src=ajx_ima.gif>";
var form = document.getElementById('code_text').value;
var xmlhttp;
if (window.XMLHttpRequest)
xmlhttp=new XMLHttpRequest();
else
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", "process_php.php", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var res = xmlhttp.responseText;
document.getElementById('tdop').innerHTML = "<iframe src=out_php.htm id=out></iframe>";
}
}
xmlhttp.send("code="+form);
}
</script>
<table border=0>
<tr>
<td>
<textarea id="code_text" style="resize: none;"></textarea>
</td>
<td id="tdop">
<iframe src="blank.htm" id="out" frameBorder="1"></iframe>
</td>
</tr>
<tr><td colspan="2" align="center"><input type="button" value="Update Page" onclick="update()"></td></tr>
</table>
写入接收数据的文件
<?php
$stringData = ''.isset($_POST['code']) ? $_POST['code'] : '';
$myFile = "buf_php.php";
$fh = fopen($myFile, 'w+');
file_put_contents($myFile, $stringData);
fclose($fh);
$myFile = "out_php.htm";
system("php buf_php.php > $myFile");
echo $stringData;
?>