我正在寻找一种(正确的)方式来读取和写入带有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代码无法显示。在更改选项卡时,并不是说某些脚本首先用于读取文件。一切正常。
谢谢!
答案 0 :(得分:0)
您可能需要查看PHP htmlentities和htmlspecialcharacters。
答案 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是正确的特殊角色