Контент, отправляемый через jQuery ajax, обрезается - PullRequest
2 голосов
/ 30 ноября 2010

Я пытаюсь отправить html с помощью метода jQuery $ .ajax (), а затем вывести html в новый файл .html, но по какой-то причине его содержимое обрезается.

Я настроил контрольный пример:

<html>

<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script >
$(document).ready(function(){
      var contents = $('html').html();
      var filename = "test/000.html";
      $.ajax({
         type: "POST",
         url: "/file.php",
         data: "content="+contents+"&fn="+filename, 
         dataType: "html",
         success: function(msg, ts, xh){
             console.log(msg);
             console.log(ts);
             console.log(xh);
             alert("success");
         },
         processData: false,
         error: function(X, textStatus, error){
             alert("Error saving... please try again now.")
         }
     });
});
</script>


</head>

<body>

<div id="rteContainer" class="dev">
  <div id="textEditor">
    <form>
    <textarea name="balh" id="balh" rows="25" cols="103"></textarea> 
    <input type="button" id="updateContent" value="Update Changes">
    <input type="button" id="closeEditor" value="Close Without Saving">
    </form>
  </div>
</div>

</body>
</html>

Файл file.php:

<?php
header("Content-type:text/html;charset:UTF-8");
$content = "<html>".stripslashes(urldecode($_POST["content"]))."</html>";
$dump_file = $_POST["fn"];
$fp = fopen($dump_file, 'w');
fclose($fp);
echo $content;
?>

Почему его отрезали? Я предполагаю, что это проблема кодирования, но я не могу понять это.

Ответы [ 3 ]

9 голосов
/ 30 ноября 2010

HTML-строка, contents, должна быть закодирована в URL, прежде чем POST ее.Javascript предоставляет функцию escape(), как раз для этой цели.

Передайте $('html').html() на escape() и назначьте ее на contents, например:

var contents = escape($('html').html());
3 голосов
/ 30 ноября 2010

Ваш скрипт умирает от смущения из-за огромной дыры в безопасности.

Никогда, никогда не записывайте в файл, где имя файла является параметром формы, без проверки имени файла в первую очередь.Даже начинающий хакер может использовать этот скрипт для перезаписи любого файла в вашей системе, к которому у веб-сервера есть доступ.

В своем вызове Ajax передайте массив параметров типа ключ { } в параметре data, не объединяйте переменные с амперсандами самостоятельно:

data: { content: contents,
        fn: filename }

О,и вы на самом деле никогда не записываете содержимое в дамп-файл, поэтому любой файл, на который указывает 'fn', просто усекается.

Надеюсь, это поможет ...

0 голосов
/ 30 ноября 2010

Я подозреваю, что амперсанд в javascript вызывает проблемы.Попробуйте заменить его на '&' и посмотрите, исправит ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...