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

问题描述 投票:2回答:3

我想把一首歌的歌词提交到文本区域。所以,这需要在输出时保持换行符。我知道浏览器标准应该使用\r\n作为换行符,PHP的nl2br()函数可以将\r\n转换为<br>tags。

我也知道textarea输入需要wrap =“hard”来传递换行符,否则wrap =“soft”的默认值将被忽略,并且当使用wrap =时必须指定cols =“” “硬”。我试图用下面的html来完成这个:

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

但是,POST数组不显示任何换行符。我把它输入textarea:

第一行的歌词

那是进入文本区域的

唉,我很沮丧

红色的眼睛和火和迹象

因为换行符不在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学校的演示(https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_textarea_wrap)。但是,我似乎无法使这个例子起作用。当我在textarea中输入许多换行符时,文本没有\r\n

我在这里错过了什么?

php html forms textarea line-breaks
3个回答
1
投票

关于wrap属性,您不需要它来实现您想要实现的目标。如HTML 5.2 specification中所述,当使用softhard属性选项时,文本中的换行符将被保留。

仅当您想要限制输入的每一行的长度时,才需要hard选项。使用此选项可以在输入自然包裹的地方强制执行其他换行符(即,行的长度超过cols中设置的值)。

例如,如果我有一个设置为cols="20" wrap="hard"的textarea并输入文本:

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选项捕获。

关于提交的文本,请注意,在发布的值中不会看到转义字符\r\n,换行符仍然与您在键盘上按“enter”键时的解释形式相同。

即使您看不到转义字符,新行仍然存在,仍然可以通过PHP找到并操作。正如您所建议的那样,nl2br可用于将新行转换为HTML break元素。

如果您确实需要将换行转换为相应的转义字符,可能在存储值之前,则有许多方法可以操作字符串。几个例子:

$escaped_newlines = str_replace("\r\n", '\r\n', $_POST['reading_text']);
$escaped_newlines = preg_replace('/\r\n/', '\r\n', $_POST['reading_text']);

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

最后,您目前如何查看$_POST的内容?如果要将var_dump的内容直接输出到HTML中,则需要将输出包装在<pre></pre>标记中,以便在生成的HTML中查看换行符。更好的是,输出到日志文件,这样您就不需要考虑这样的渲染问题。


0
投票

您可以将textarea文本作为查询字符串的一部分传递。这将强制整个字符串进行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/

我想你也可以在POSTING之前urlencode()textarea文本,并在另一端urldecode它。


0
投票

如果您在输出或存储到数据库之前对字符串使用PHP过滤器qazxsw poi(qazxsw poi),则将删除换行符FILTER_FLAG_STRIP_LOW

要解决此问题,您可以使用http://php.net/manual/en/filter.filters.flags.php而不是\r\n

FILTER_FLAG_ENCODE_LOW
© www.soinside.com 2019 - 2024. All rights reserved.