2

我的 textarea 不接受 &使用 AJAX 和 PHP 保存页面内容。

这是使用带有 ajax 的 textarea 的编辑器页面:

<html>
        <head>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script>
        function save(){
             var x = $("textarea").val();
             var data = 'c='+x;

     $.ajax({
         type: 'POST',
         url: 'save.php',
         data: data,
         success: function(e){
             $("#s").html(e);
         }
     });
}
</script>
</head>
<body>
<textarea>
<?php

$fn = "blank.html"; 

//FILE TO BE EDITED (FILENAME EDITABLE)

$file = fopen($fn, "r+"); //OPENS IT
$fr = fread($file, 1000000); //READS IT
fclose($file); //CLOSE CONNECTIONS
echo $fr; //SHOWS THE EDITABLE FILE HERE

?>
</textarea><br>
<input onClick="save()" id="x" type="button" value="Save"><br><br>
<span id="s"></span><br>
<a href="blank.html" target="_new">view file</a>
</body>
</html>

这是save.php代码:

<?php

$c = $_POST["c"]; 

//TEXT FROM THE FIELD


$f = 'blank.html'; 

//FILE TO SAVE (FILENAME EDITABLE)

$o = fopen($f, 'w+'); //OPENS IT
$w = fwrite($o, $c); //SAVES FILES HERE
$r = fread($o, 100000); //READS HERE
fclose($o); //CLOSES AFTER IT SAVES

//DISPLAYS THE RESULTS
if($w){
    echo 'File saved';
} else {
    echo 'Error saving file';
}

?>
4

2 回答 2

2

这是由于 url 编码而发生的。你应该encodeURIComponent()在你的 JavaScript 参数上使用。

改变

var x = $("textarea").val();

var x = encodeURIComponent($("textarea").val());

您的脚本也可以简化

 <script>
 $(function (){ 
   $("#x").click(function (){
     $.ajax({
       type: 'POST',
       url: 'save.php',
       data: { c:  encodeURIComponent($("textarea").val())}
       success: function(e){
           $("#s").html(e);
       }
     });    
   });
});
</script>

将输入更改为

<input id="x" type="button" value="Save">

您还应该遵守 html 标准。在此示例中,最好将事件绑定到提交表单事件并使用<form>标签。

于 2013-07-02T12:45:21.520 回答
0

确保您始终通过您的内容 encodeuricomponent

所以你的代码将是var x = encodeURIComponent($("textarea").val());

于 2013-07-02T12:47:13.430 回答