处理php中的新行

Posted

技术标签:

【中文标题】处理php中的新行【英文标题】:Handling new lines in php 【发布时间】:2012-12-16 07:27:25 【问题描述】:

我在 html 中有表单,用户可以将文本放在文本区域中。 我将文本区域的内容保存到 mysql 数据库中(在 TEXT 类型的字段中)。 然后我在我的应用程序中的某个地方需要加载该文本并将其放入数组中,其中每个索引将是文本的一行。

<textarea rows="10" cols="80">
Row one
Row two
Row tree
</textarea>

array (output in "php pseudocode"):
$array = array();
$array[0] = Row one;
$array[1] = Row two;
$array[2] = Row tree;

我是如何做到的: 我将它保存到 db 然后我加载它并使用:

$br = nl2br($string,true);
$array = explode("<br />", $br);

我使用 nl2br 的原因是我想避免来自不同平台的文本行尾问题。我的意思是 /n 或 /r/n。 但在我的解决方案中,一定是某个地方出现错误,导致它不起作用(数组 $array 为空)。 更好的解决方案可能会以某种方式使用explode或类似的方式将其拆分为数组用于换行符,但这里又是从换行符开始的问题,我不知道如何解决(问题与 \n 或\r\n)。 有人可以给我一个建议吗?谢谢。

【问题讨论】:

【参考方案1】:

我建议您跳过nl2br,直到您准备好将数据实际发送到客户端。解决您的问题:

// $string = $get->data->somehow();
$array = preg_split('/\n|\r\n/', $string);

【讨论】:

@IlmariKaronen 你的正则表达式和答案有什么区别吗? @user1097772:我的更短。 :) 除此之外,并非如此。一种或另一种方式可能存在微小的性能差异,但可能不足以在高度人工条件之外进行测量。 @IlmariKaronen 好的,感谢您的解释和有用的提示 :) 我可能会使用第一个,因为它更易于人类阅读 :) 但很高兴知道更多的方法:)【参考方案2】:

当您在脚本中收到输入时,将行尾字符标准化到 PHP_EOL,然后再将数据存储到数据库中。这对我来说是正确的。这只是“过滤输入”过程中的又一步。您可能会发现其他 EOL 字符串,但这些是最常见的。

<?php // RAY_temp_user109.php
error_reporting(E_ALL);

if (!empty($_POST['t']))

    // NORMALIZE THE END-OF-LINE CHARACTERS
    $t = str_replace("\r\n", PHP_EOL, $_POST['t']);
    $t = str_replace("\r",   PHP_EOL, $t);
    $t = str_replace("\n",   PHP_EOL, $t);
    $a = explode(PHP_EOL, $t);
    print_r($a);


$form = <<<FORM
<form method="post">
<textarea name="t"></textarea>
<input type="submit" />
</form>
FORM;

echo $form;

在 PHP_EOL 上展开并跳过 nol2br() 部分。您可以使用 var_dump() 查看生成的数组。

【讨论】:

PHP_EOL 对于来自任意来源的文本毫无意义。 PHP_EOL 设置为 LOCAL 系统的 EOL 字符。如果文本最初来自(例如)Windows,并且您在 Linux 上运行,那么您将一事无成,因为您正在寻找错误的 eol 字符。 PHP_EOL 仅在您不需要可移植性并且数据将始终保留在同一类型的操作系统上时才有用。 -1 表示态度(即使您添加了笑脸),也表示没有实际显示如何 来规范化输入。 @llmari Karonen:感谢您的 snotgram。当您发表讽刺言论时,我正在编写解决方案。嘘! 好的,反对票被推翻。但是,在 PHP_EOL == "\r\n" 所在的平台上,您的代码不会完全符合您的预期。您可能希望将换行符规范化为单个字符值,例如 "\n"

以上是关于处理php中的新行的主要内容,如果未能解决你的问题,请参考以下文章

json_decode() (PHP 7) 中的新行和标签

如何在 php 代码中的 textarea 元素中添加新行?

在 PHP 中附加文件...无法使用新行 (\n) 来处理变量

MySQL PHP插入新行,其中rowNum列值始终按日期和时间按时间顺序排列

git log pretty format 可以保留主题中的新行吗?

未捕获的 SyntaxError:新行的无效或意外令牌