Печать содержимого файла приводит к разрыву строки сценария для каждого перехода строки файла - PullRequest
0 голосов
/ 16 мая 2019

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

Я использую php 7.3 и apache2 на моем сервере (Ubuntu Disco).Я пытался заменить разрывы строк в файле (тег br, если я его на самом деле поместил, он считается html xD) при печати содержимого и восстановлении \ n обратно, когда пользователь изменил примечание, но сначала я не получил егона работу, во-вторых, мне было интересно, есть ли более эффективный способ сделать это.

Вот как я храню файлы:

var content = $("#writeNoteContent").val(); //this is a text area
data = {
    //other parameters
    'content': content,
    'type': 'write'
  }
  $.post(ajaxurl, data, function(response) {
    response = JSON.parse(response);
    if (response == "done") {
    } else {
      error(response);
    }
  });
function writeNote($conn, String $content) {
      //insert values into mysql table (I don't think it's relevant)
      $noteFile = fopen("../notedb/$user/$title.txt", "w+");
      if ($noteFile == false) {
        die();
      }
      fwrite($noteFile, $content);
      fclose($noteFile);
      return true;
  }

Это содержание образцафайл: "А. (перевод строки) Капо."Затем я читаю содержимое файла:

  function getNote($conn, String $title) {
    $title = str_replace(" ", "_", $title);
    try {
      $query = $conn->prepare("SELECT dir FROM note WHERE title = :ttl");
      $query->bindParam(":ttl", $title);
      $query->execute();
      $query->setFetchMode(PDO::FETCH_ASSOC);
      $dir = $query->fetchAll();
      $dir = $dir[0]["dir"];
      return file_get_contents("../$dir");
    } catch (PDOException $e) {
      PDOError($e);
      return false;
    } finally {
      $conn = null;
    }
  }

И когда я печатаю содержимое с помощью:

$fc = str_replace("'", "&#39", getNote(connectDb(), $title));
        echo "<script>$('.noteContent').append('<br/><span class=spawnContent>" . $fc . "</span><br/>');</script>";

Сценарий выглядит так (он действительно разрезан на две части):

<script>$('.noteContent').append('<br/><span class=spawnContent>A.
Capo.</span><br/>');</script>

Infact бросает JavaScript: SyntaxError: '' строковый литерал содержит неэкранированный разрыв строки (Firefox) Uncaught SyntaxError: неверный или неожиданный токен (Chrome)

Я ожидаю вывод:

$(».noteContent '). присоединять ('А. (разрыв строки?) Капо.«);

Я получаю: "$ ('. NoteContent'). Append ('А. (сценарий нарезан здесь) Капо.«);";

1 Ответ

0 голосов
/ 16 мая 2019

Попробуйте заменить \ n и / или \ r ничем, что-то вроде этого:

$crlf   = array("\n", "\r");
$fc = str_replace($crlf, '', $fc);
echo "<script>$('.noteContent').append('<br/><span class=spawnContent>" . $fc . "</span><br/>');</script>";
...