如何在HTML textarea POST数据中保留换行符

时间:2019-03-05 01:21:14

标签: php html forms textarea line-breaks

我正在尝试将歌曲的歌词提交到文本区域。因此,这需要在我输出时保持换行。我知道以下事实:浏览器标准应使用\r\n作为换行符,PHP的nl2br()函数可以将\r\n转换为<br>标记。

我还知道以下事实:textarea输入需要wrap =“ hard”才能通过换行符,否则默认的wrap =“ soft”将被忽略,并且必须在以下情况下指定cols =“”:使用wrap =“ hard”。我尝试使用以下html来实现此目的:

<textarea wrap="hard" name="reading_text" cols="450" rows="6" maxlength="5000"></textarea>

但是,POST数组不显示任何换行符。我将其输入到文本区域:

  

第一行歌词

     

已输入到文本区域

     

很遗憾

     

红眼睛,火和迹象

     

因为换行符不在POST数据中

     

我想照耀一缕阳光,永远不要离开家

我在POST数组中得到了它:

array(5) { ["reading_text"]=> string(216) "Line one of the lyrics That were entered into the textarea Alas to my dismay Red eyes and fire and signs Because the line-breaks are not in the POST data" ["add_reading"]=> string(3) "Add" }

为了让我更感到困惑,我尝试查看W3 Schools演示(https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_textarea_wrap)。但是,我似乎甚至无法使该示例起作用。当我在文本区域中输入许多换行符时,文本中没有\r\n

我在这里想念什么?

3 个答案:

答案 0 :(得分:1)

关于flutter create .属性,您不需要使用它来实现目标。如HTML 5.2 specification中所述,使用 wrapsoft属性选项时,文本内的换行符会保留。

仅当您要限制输入每一行的长度时才需要hard选项。使用此选项可在您的输入自然换行的任何地方(即,行长于hard中设置的值的地方)强制换行。

例如,如果我有一个设置为cols的文本区域,然后输入了文本:

cols="20" wrap="hard"

然后提交的值将变为:

This is a long string that will exceed the number of cols in this textarea

如果我正确理解,您只想保留用户有意输入的换行符;这些将使用默认的This is a long string that will exceed the number of cols in this textarea 选项捕获。

关于提交的文本,请注意,转义字符soft不会显示在发布的值中,换行符的格式仍与它们在您按下键盘上的“输入”键。

即使您看不到转义符,换行符确实存在,并且仍然可以被PHP查找和操纵。如您所建议,\r\n可用于将新行转换为HTML break元素。

如果实际上需要将换行符转换为其相应的转义符(也许在存储值之前),则可以使用多种方法来操作字符串。几个例子:

nl2br

(为进一步阅读,有一个关于double/single quotes and interpreting newlines的有用的S.O.答案)

最后,您目前如何查看$escaped_newlines = str_replace("\r\n", '\r\n', $_POST['reading_text']); $escaped_newlines = preg_replace('/\r\n/', '\r\n', $_POST['reading_text']); 的内容?如果将$_POST的内容直接输出到HTML,则需要将输出包装在var_dump标记中,以查看结果HTML中的换行符。更好的是,输出到日志文件,这样您就不必考虑此类渲染问题。

答案 1 :(得分:0)

可以将文本区域文本作为查询字符串的一部分传递。这将强制对整个字符串进行url编码,如下所示:

%0AGray%2C%20quiet%20and%20tired%20and%20mean%0A%0APicking%20at%20a%20worried%20seam%0A%0AI%20try%20to%20make%20you%20mad%20at%20me%20over%20the%20phone.%0A%0ARed%20eyes%20and%20fire%20and%20signs%0A%0AI%27m%20taken%20by%20a%20nursery%20rhyme%0A%0AI%20want%20to%20make%20a%20ray%20of%20sunshine%20and%20never%20leave%20home%0A

然后仅使用urldecode()对接收页面上的字符串进行解码。这应该保留格式并正确显示它。

http://php.net/manual/en/function.urldecode.php

https://www.tools4noobs.com/online_php_functions/urldecode/

我想您也可以在发布之前urlencode()textarea文本,然后在另一端urldecode。

答案 2 :(得分:0)

如果在输出或存储到数据库之前对字符串使用PHP的过滤器FILTER_FLAG_STRIP_LOWhttp://php.net/manual/en/filter.filters.flags.php),则将删除换行符\r\n

要解决此问题,您可以这样使用FILTER_FLAG_ENCODE_LOW而不是FILTER_FLAG_STRIP_LOW

$input = filter_var($input, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);