Файл ввода / вывода для textarea в PHP - PullRequest
3 голосов
/ 29 ноября 2011

У меня и моего друга есть небольшая страница свободного времени вместе. Он не программист, и для того, чтобы он мог изменить текст на первой странице, я создал php-скрипт, который

1) Считывает данные из файла "tester.txt" (это текст, который должен идти на первой странице)
2) Распечатывает этот текст в текстовой области, где вы можете отредактировать текст и отправить его снова
3) Записывает отредактированный текст в тот же файл, «tester.txt»

Две функции чтения (); и писать(); выглядеть так

function Read() {
    $file = "tester.txt";
    $fp = fopen($file, "r");
    while(!feof($fp)) {
        $data = fgets($fp, filesize($file));
        echo "$data <br>";
    }
    fclose($fp);
}

function Write() {
    $file = "tester.txt";
    $fp = fopen($file, "w");
    $data = $_POST["tekst"];
    fwrite($fp, $data);
    fclose($fp);
}

Единственная проблема, с которой я столкнулся, заключается в том, что при выводе текста в текстовую область возвращаемая строка записывается как <br> - и я не хочу, чтобы это делалось, потому что когда вы редактируете часть кода и переписывает его, появляется еще один слой <br>. Вот скриншот для иллюстрации:

Test 1

Test 2

Есть ли обходной путь к этому?

Спасибо!

Если вам нужен остальной код, вот он:

<html>
    <head>
        <title>Updater</title>
    </head>
    <body>
        <?php
               function Read() {
                   $file = "tester.txt";
                   $fp = fopen($file, "r");
                   while(!feof($fp)) {
                       $data = fgets($fp, filesize($file));
                       echo "$data <br>";
                   }
                   fclose($fp);
               }

               function Write() {
                   $file = "tester.txt";
                   $fp = fopen($file, "w");
                   $data = $_POST["tekst"];
                   fwrite($fp, $data);
                   fclose($fp);
               }
        ?>

        <?php
        if ($_POST["submit_check"]){
            Write();
        };
        ?>      

        <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
        <textarea width="400px" height="400px" name="tekst"><?php Read(); ?></textarea><br>
        <input type="submit" name="submit" value="Update text">
        <input type="hidden" name="submit_check" value="1">
        </form>

                <?php
        if ($_POST["submit_check"]){
            echo 'Text updated';
        };
        ?>      


    </body>
</html>

Ответы [ 6 ]

10 голосов
/ 29 ноября 2011

Это проще, чем вы думаете.Вы не должны выводить теги <br>, так как текстовое поле уже содержит введенные символы новой строки (\r\n или \n).Вам не нужно читать файл таким образом, если вы читаете его таким образом, вам не нужно беспокоиться о содержимом символов.

Изменение:

$fp = fopen($file, "r");
while(!feof($fp)) {
    $data = fgets($fp, filesize($file));
    echo "$data <br>";
}
fclose($fp);

на:

echo file_get_contents( $file);

Проблема решена.

1 голос
/ 29 ноября 2011

Это происходит потому, что при записи содержимого в текстовую область вы ставите <br> в конце каждой строки. Но в текстовой области разрывы строк отмечены "\n". Когда вы сохраняете существующий текст, в следующий раз разрывы строк заменяются на <br>.

При распечатке содержимого на общедоступной странице сохраняйте
. Но на странице редактирования уберите бр.

Вот что я бы сделал с кодом PHP:

<?php
    define("FILE_NAME", "tester.txt");

    function Read()
    {
        echo @file_get_contents(FILE_NAME);
    }

    ;

    function Write()
    {
        $data = $_POST["tekst"];
        @file_put_contents(FILE_NAME, $data);
    }

    ?>

    <?php
    if ($_POST["submit_check"])
    {
        Write();
    }
    ?>      
0 голосов
/ 29 ноября 2011

Используйте регулярное выражение для замены тега разрыва символом новой строки

preg_replace('#<br\s*/?>#i', "\n", $data);

Более подробное объяснение вы можете найти здесь ответили

0 голосов
/ 29 ноября 2011

Вам не нужны <br>.В зависимости от того, как настроен ваш <textarea>, по умолчанию строки жестко переносятся с использованием \n.Они сохраняются при сохранении файла, поэтому вам не нужно добавлять собственные разрывы строк.

0 голосов
/ 29 ноября 2011

По некоторым предположениям, он размещен на * nix-машине, и он использует Windows-компьютер для редактирования?

В этом случае изменение функции записи на это должно решить проблему:

function Write(){
    $file = "tester.txt";
    $fp = fopen($file, "w");
    $data = str_replace(array("\r\n","\r"),"\n",$_POST["tekst"]);
    fwrite($fp, $data);
    fclose($fp);
};
0 голосов
/ 29 ноября 2011

Вы используете echo "$data <br>"; - просто сделайте это echo $data;?

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