文本区域不接受&;nbsp;和&;amp;同时使用ajax和php保存页面内容


Textarea not accepting   and & whille saving pages content using ajax and php

在使用AJAX和PHP保存页面内容时,我的文本区域不接受 &

这是使用ajax的文本区域的编辑器页面:

<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';
}
?>

这是因为url编码。您应该在JavaScript参数上使用encodeURIComponent()

更改

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>标记。

确保始终通过encodeuricomponent 传递内容

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