3

http://c9.ioのようなサービスを作成して、サーバー上の.phpファイルをブラウザーで直接編集しています。

そこでCodeMirrorエディターを実装しました。エディタは次のように見えます: http: //codemirror.net/mode/php/index.html

私の問題は、jQuery.ajaxPOSTを介してphpコードを含むデータを送信できないことです。

次の行をhello.phpに保存したいとします。

 <?php 
         require_once("lukujA.php"); 
 ?>

私はファイルを保存するために次のjs/jqueryコードを使用しています:

$(".save-file").click(function (){
            var content = editor.getValue(); //textarea text
            var path = "hello.php";
        //following line shows content-data as it shows on CodeMirror editor
        //confirm box without any quotes / slashes / and with every linebreak

            var response = confirm("Do you want to save? DATA: " + content);
            if(response)
            {
                $.ajax({
                    type: "GET",
                    url: "saveFile.php",
                    data: "content="+content+"&path="+path+"",
                    success: function(){
                        alert("File saved!"); 
                    }
                });
            }
            else{
                alert("File not saved!");
            }
        });

saveFile.php:

$path = $_GET['path'];
$content = $_GET['content'];

if($path !== "" and is_writable($path))
    file_put_contents($path, $content);

上記のコードは、hello.phpを次のように出力します(1行にスラッシュを付けて)(POSTを使用すると、エディターで作成した改行が削除されるようです):

<?php require_once(\"lukujA.php\"); ?>

stripslashes($content);次のようなphpコードがある場合、saveFile.phpの原因で使用できません。

<?php echo "<input type=\"text\" name=\"foo\">"; ?>

strip_slashesそれらのスラッシュを削除し、実行するとコードが無効になります。

これに遭遇するにはどうすればよいですか?また、新しいコードをファイルに保存するにはどうすればよいですか?この種のエディターをどのように作成しますか?

ありがとう

4

1 に答える 1

3

以下ですべての作業を行いました:

    $(".save-file").click(function (){
        editor.save();
        var content = editor.getValue(); //textarea text
        var path = $("#hiddenFilePath").text(); //path of the file to save
        var response = confirm("Do you want to save?");
        if(response)
        {
            $.ajax({
                type: "POST",
                url: "saveFile.php",
                data: {c:content,p:path},
                dataType: 'text',
                success: function(){
                    alert("File saved!"); 
                }
            });
        }
        else{
            alert("File not saved!");
        }
    });

コードを見るdata: {c:content,p:path}, dataType: 'text',

そしてsaveFile.phpではstripslashes($content)、php設定でマジッククォートがオンになっているようです。

ストリップスラッシュのようなデータを送信する必要がある場合echo "<br><a href=\"?p=$p&vko=$vkoPrev\">Edellinen</a> <a href=\"?p=$p&vko=$vko\">Tämä viikko</a> <a href=\"?p=$p&vko=$vkoNext\">Seuraava</a><br><br>";でも、上記のように POST を介してデータを送信すると、データの引用符の前にこれらのスラッシュが保持されます urlEncoding は、データのスラッシュの前にスラッシュも追加します。

説明するのは難しい。将来誰かがこれから何かを得ることを願っています:)英語があまり上手でなくてごめんなさい。

于 2012-03-03T11:41:00.537 に答える