php :: 文本区域中的新行?

问题描述 投票:0回答:13

通过 php 插入文本时如何在文本区域中创建新行?

我以为是

\n
,但它确实打印在文本区域中。

谢谢

php textarea
13个回答
79
投票

没有看到你的代码我无法确定,但我的猜测是你使用的是单引号 (' ') 而不是双引号 (" ”)。

如果字符串用双引号引起来,PHP 将仅计算转义序列。如果你使用' ',PHP 只会将其视为文字字符串。如果您使用“ ",PHP 将解析字符串中的变量和转义序列,并像您期望的那样打印一个新行。


10
投票

尝试

$text = 'text line one' . PHP_EOL . 'text line two';
echo '<textarea>' . $text . '</textarea>';

将在 texarea 的修复行上添加每个文本。


6
投票

PHP 端:从 Textarea 字符串到 PHP 字符串

$newList = ereg_replace( "\n",'|', $_POST['theTextareaContents']);

PHP 端:PHP 字符串返回到 TextArea 字符串:

$list = str_replace('|', '&#13;&#10;', $r['db_field_name']);

3
投票

Alay Geleynse 说的是对的,我和你有同样的问题,问题是由于转义字符( , )在那里。为了“转义”变量,我使用了

$var = stripcslashes($var)
并且它显示正确


1
投票

回车

\n 
\r
<br />
^M

1
投票

2020 - Google 把我带到这里来做类似的事情。

基于上面用户@Va1iant 的回答

环境:

  • HTML 5 / Bootstrap 4.5
  • php 7.3.x
  • mariadb 10.2.x

问题:

  • 带有文本区域的输入表单 (没有问题 发布后出现在数据库中)
  • 使用文本区域编辑表单 ( 出现在数据库中以及发布后的编辑表单中)

解决方案:

  • DB - 文本区域内容的列类型设置为“varchar”
  • 编辑表单 - 文本区域内内容的代码片段(使用 stripcslashes )如下所示
<?= isset($_POST['MailingAddress']) ? stripcslashes(misc::esc($_POST['MailingAddress'])) : misc::esc($data['current_mailing_address']) ; ?>

其中misc::esc -> return htmlspecialchars($var, ENT_QUOTES|ENT_HTML5, 'UTF-8');

注:

我没有尝试使用空白:行前;如所述 CSS Tricks 所以这也可以是一个解决方案 - 不使用 stripcslashes。


1
投票

使用

nl2br()
nl2br
\n
转换为
<br />
作为字符串。但
<br />
(string) 不会创建新行。你应该将
<br />
(字符串)替换为
<br>
那么这将起作用。

示例:

$content = "foo \n bar";
echo str_replace("<br />","<br>",nl2br($content));

结果:

foo
bar

按行分割:

function SplitLine($txt){
            $txt  = nl2br($txt);
            $txt = explode("<br />",$txt);
            return $txt;
            
        }

我发送了

foo
bar 

使用

textarea
作为 php 的
POST
方法。

print_r(SplitLine($_POST['text_area']));

结果:

Array ( [0] => foo [1] => bar)

您可以使用

for
循环来获取数据并打印它:

$result = SplitLine($_POST['text_area']);
for($i = 0;$i < count($result);$i++){
   echo $result[$i]."<br>";
}

结果是

foo
bar

完整代码(仅用于测试):

<?php 
//MyFunction
function SplitLine($txt){
    $txt  = nl2br($txt);
    $txt = explode("<br />",$txt);
    for($i = 0;$i < count($txt);$i++){
       echo $txt[$i]."<br>";
    }
    return $txt;        
}
//My Code
if(isset($_POST['submit_data'])){
    print_r(SplitLine($_POST['text_area']));
}
?>
<br>
<form method='post'>
    <textarea name='text_area'></textarea>
    <br>
    <input type='submit' value='Send Data :)' name='submit_data' />
</form>

0
投票

我已将

\p
用于文本文件。尝试一下


0
投票

只是为了完成该问题的解决方案,正如其他人提到的那样,使用

"\n"
*(或在某些情况下
"\r\n"
)而不是
'\n'

当您想使用 php 显示文本区域内容并保留新行时,您需要使用

nl2br
,因此,如果您为文本分配一个变量并将其命名为 $YOUR_TEXT ,您应该将该函数用作:
nl2br($YOUR_TEXT)

更多详情请参阅这里


  • Unix和Unix程序通常只需要换行
    \n
    ,而Windows和Windows程序通常需要
    \r\n

0
投票

我有一个类似的问题,我的解决方案是双重转义换行符。 \n


0
投票
//Some Additional Related Validation
function test_input_hacks($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        $data = strip_tags($data);
        return $data;
}

$message = test_input_hacks($_POST['message']);

//For All Operating Systems
echo str_replace(array("\r\n", "\r", "\n"),'<br>', $message);

-1
投票
$row['content']=stripslashes($row['content']);
$row['content']=str_replace('<br />',"newline",$row['content']);
$row['content']=htmlentities($row['content']);
$row['content']=str_replace('newline',"<br>",$row['content']);

-5
投票

像这样使用动态输入您可以使用的每一行

echo chr(13)
© www.soinside.com 2019 - 2024. All rights reserved.