使用jquery发布textarea的值

时间:2010-10-03 03:58:10

标签: php javascript jquery file

我正在寻找一种(正确的)方式来读取和写入带有javascript,jQuery和php的linux文本文件。具体来说,我想将(#taFile)的值与jQuery($(“#taFile”)。val();)和$ .post一起带到php脚本,后者又将发布的值写入文本文件。

虽然我的代码大部分都有效,但我遇到了一个障碍:当获取textarea的值和$ .posting它时,所有特殊字符都会丢失。具体来说,1)所有特殊字符都丢失,2)新行转换为空格,3)某些特殊字符之后的所有字符(我注意到它发生了#)都丢失了。

这些仍然是剧本的粗略草稿,但我对任何改进和建议都非常开放!

使用Javascript:

$(document).ready(function() {
 $("input:button").button();
 $("#tabs").tabs();

 $("#tabs").tabs({
  select: function(event, ui) { // When a tab is selected
   file = ui.panel.id;
   console.log("js: file: "+file);
   if (file == "items" || file == "groups" || file == "whitelist" || file == "users"){ // if file is valid
    $("#taFile").remove(); // Remove any old textareas
    $("#"+file).html(''); // Add a new textarea
    $.post("/php/getFile.php?action=read&file="+file, function(data){ // Post with the current file
     $("#taFile").val(data); // Put file into textarea
    });
   }
  }
 });

 $("#btnSubmit").click(function() {
  var newcfg = $("#taFile").val();
  alert(newcfg); // This shows that newcfg preserves the exact value of the textarea
  console.log(newcfg); // As does this.
  $.post("/php/getFile.php?action=write&file="+file+"&newcfg="+newcfg); // This shows new lines (\n ?) as " " (a space) and removes all special characters (! , # ; : etc)
 });
});

PHP:

 $file = $_REQUEST['file'];
 $newcfg = $_REQUEST['newcfg'];
 $action = $_REQUEST['action'];
 $user = 'public';
 $config = "/home/$user/mc/$file.txt";

 if ($action == "read"){
  $oldcfg = file_get_contents($config);
  echo $oldcfg;
 } else if ($action == "write") { #if writing
  $fh = fopen($config, 'w') or die("Cant write to file"); #open file
  fwrite($fh, $newcfg); #write file
  fclose($fh); #close file
 }

我不得不删除php标签,因为它们导致实际的PHP代码无法显示。在更改选项卡时,并不是说某些脚本首先用于读取文件。一切正常。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可能需要查看PHP htmlentitieshtmlspecialcharacters

答案 1 :(得分:0)

注意:您正在使用jQuery.post()并将数据设置为$_GET parameters。它应该被称为;

$.post("/php/getFile.php", { action: "write", file: file, newcfg: newcfg },
   function(data){
     alert("Data Loaded: " + data);
   });

您可以使用以下函数保留换行符:

function splitter($content) {
$content = str_replace(chr(10),'<br/>',$content);
$content = str_replace("<br/><br/><br/><br/>","<br/><br/>",$content);
return $content;
}

您的运行方式如下:

$newcfg = splitter($newcfg);

而且typoknig是正确的特殊角色