【问题标题】:How to preserve newlines in a textarea when passing by POST?通过 POST 传递时如何在文本区域中保留换行符?
【发布时间】:2021-01-02 20:34:57
【问题描述】:

在我的网页中,我通过POST 方法将textarea 的值传递给PHP。该值应该写入文件,但是在包含该值的$_POST键中,它没有换行符,所以当它写入文件时,没有换行符(好像有人替换了@ 987654324@ 什么都没有)。

是否有一些 PHP/JS 函数可以将 JS textarea 换行符替换为在文件中工作的 PHP 换行符?

编辑:

我的代码应该是一个文件编辑器。这里是:

<!DOCTYPE html>
<html>
    <head>
        <title>File Editor</title>
        <meta charset="UTF-8"/>
        <style>h1{text-align:center;font-size:40px;padding:10px;border:2px solid black;border-radius:10px;}textarea{width:90%;height:90%}</style>
    </head>
    <body>
        <h1>File Editor</h1>
        <?php
        if(isset($_POST["save"],$_POST["extra"]))
          file_put_contents($_POST["save"],$_POST["extra"]);
        if(isset($_POST["delete"]))
          unlink($_POST["delete"]);
        if(!isset($_POST["filename"],$_POST["submit"])){
        ?>
        <form action="editor.php" method="post">
            <label for="filename" id="n">Enter a file to edit: </label>
            <input type="text" name="filename" placeholder="Enter file name to edit"/>
            <button type="submit" name="submit">Submit</button>
        </form>
        <?php }else{ ?>
        <textarea><?php echo htmlspecialchars(file_get_contents($_POST["filename"])); ?></textarea>
        <span style="display:none"><?php echo $_POST["filename"]; ?></span>
        <form action="editor.php" method="post" style="display:none" id="a">
            <input name="close" id="v" />
            <input name="extra" id="e" />
        </form><br/>
        <button id="save">Save</button>
        <button id="close">Close file</button>
        <button id="delete" style="color:red">Delete file</button>
        <script>
            function submit(v,x,c){
                document.getElementById("v").name=v;
                document.getElementById("v").value=x;
                document.getElementById("e").value=c;
                document.getElementById("a").submit();
            }
            document.getElementById("save").onclick=function(){
                submit("save",document.getElementsByTagName("span")[0].innerHTML,document.getElementsByTagName("textarea")[0].value.replace(/\n/g,"\r\n"));
            }
            document.getElementById("close").onclick=function(){submit("close");}
            document.getElementById("delete").onclick=function(){
                if(confirm("Are you sure you want to delete this file?"))submit("delete",document.getElementsByTagName("span")[0].innerHTML);
            }
        </script><br/><br/>
        <?php } ?> </body>
</html>

【问题讨论】:

  • 如果您使用的是 Windows,您可能需要将所有 \n 替换为 \r\n
  • @TimothéMalahieude:我刚试过textarea.value.replace(/\n/g,"\r\n");,但它似乎不起作用。我在这里做错了吗?
  • 您如何读取 $_POST 数据?你是怎么把它写进你的文件的。提供一些代码。 file_put_contents('foo.txt', $_POST['bar']) 应该按预期工作。如果没有,你是不是用了特殊的js textarea?
  • 嗯,你能贴出你的代码吗?
  • @JensV :不,我使用的是普通文本区域。

标签: javascript php newline


【解决方案1】:

我看到您的 javascript 代码的目的只是填写任何输入值。这可以通过直接使用&lt;form&gt; 来完成。最有可能的是,将您的数据复制到 &lt;input tye="text"&gt;(文本是默认类型)会破坏您的换行符。

这样的事情应该是等效的,并且没有提出的问题:

<!DOCTYPE html>
<html>
    <head>
        <title>File Editor</title>
        <meta charset="UTF-8"/>
        <style>h1{text-align:center;font-size:40px;padding:10px;border:2px solid black;border-radius:10px;}textarea{width:90%;height:90%}</style>
    </head>
    <body>
        <h1>File Editor</h1>
<?php
if(isset($_POST["save"],$_POST["extra"]))
    file_put_contents($_POST["filename"],$_POST["extra"]);
if(isset($_POST["delete"]))
    unlink($_POST["filename"]);
if(!isset($_POST["filename"],$_POST["submit"])){
?>
<form action="editor.php" method="post">
    <label for="filename" id="n">Enter a file to edit: </label>
    <input type="text" name="filename" placeholder="Enter file name to edit"/>
    <button type="submit" name="submit">Submit</button>
</form>
<?php }else{ ?>
<span style="display:none"><?php echo $_POST["filename"]; ?></span>
<form action="editor.php" method="post">
    <textarea name="extra"><?php echo htmlspecialchars(file_get_contents($_POST["filename"])); ?></textarea>
    <br/>
    <input type="hidden" name="filename" value="<?= $_POST['filename'] ?>">
    <button name="save">Save</button>
    <button name="close">Close file</button>
    <button name="delete" style="color:red">Delete file</button>
</form>
<script>
    document.getElementById("delete").onclick=function(e){
        if(!confirm("Are you sure you want to delete this file?")) e.preventDefault();
    }
</script>
<br/><br/>
<?php } ?> 
    </body>
</html>

同样如前所述,您可能需要在显示时为 html 格式化换行符。


当需要传递相同或隐藏的数据时,您可以使用&lt;input type="hidden" name=".." value=".."&gt;。这用于传递文件名。按下按钮会传递所需的操作。您按下的按钮名称将在请求中传递。

【讨论】:

    【解决方案2】:

    在你的 PHP 代码中,你可以这样做:

    $text = nl2br($_POST['name_of_textarea']);
    

    然后将$text保存到文件中。

    这将保留换行符。

    【讨论】:

    • 这会保留网页中的换行符,但是当我输出到文件时会出现问题。
    • 刚试过,不行。无论如何,JensV 的解决方案是有效的。无论如何,谢谢!
    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2015-04-08
    • 2020-03-15
    相关资源
    最近更新 更多