首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在html文本区域中保留分行符以发布数据

如何在html文本区域中保留分行符以发布数据
EN

Stack Overflow用户
提问于 2019-03-05 01:21:14
回答 3查看 3.2K关注 0票数 4

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

我还意识到,textarea输入需要wrap=“硬”才能传递换行符,否则wrap="soft“的缺省值将被忽略,并且在使用wrap="hard”时必须指定cols="“。我试图用下面的html实现这一点:

代码语言:javascript
复制
<textarea wrap="hard" name="reading_text" cols="450" rows="6" maxlength="5000"></textarea>

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

歌词第一行 输入到文本区域中的 唉,令我惊愕 红眼睛,火和迹象 因为换行符不在POST数据中。 我想做一缕阳光,永不离开家

我在POST数组中得到了这个:

代码语言:javascript
复制
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学校演示(包装)。然而,我似乎甚至不能让这个例子奏效。当我在textarea中输入许多分行符时,文本将不带\r\n

我在这里错过了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-09 19:00:18

这里最后解决了这个问题:在输出或存储到数据库之前,我在字符串上使用了characters FILTER_FLAG_STRIP_LOW (http://php.net/manual/en/filter.filters.flags.php),您将删除换行符\r\n

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

代码语言:javascript
复制
$input = filter_var($input, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
票数 0
EN

Stack Overflow用户

发布于 2019-03-06 00:35:54

对于wrap 属性,您不需要它来实现您想要实现的目标。正如在HTML5.2规范中所描述的,当使用softhard属性选项时,文本中的换行符将被保留。

只有当您想限制输入的每一行的长度时,hard选项才是必需的。使用此选项在输入自然包装的任何地方强制额外的换行(也就是说,在任何情况下,该行都比cols中设置的值长)。

例如,如果我有一个设置为cols="20" wrap="hard"的文本区域,然后输入文本:

代码语言:javascript
复制
This is a long string that will exceed the number of cols in this textarea

然后提交的价值将变成:

代码语言:javascript
复制
This is a long
string that will
exceed the number of
cols in this
textarea

如果我理解正确,您只想保留用户有意输入的换行符;这些中断将使用默认的soft选项捕获。

有关提交的文本,请注意,转义字符\r\n将不会显示在已发布的值中,换行符的解释形式仍与按键盘上的"enter“键时相同。

即使您看不到转义字符,但换行符确实存在,并且仍然可以被PHP找到和操作。正如您所建议的,可以使用nl2br将新行转换为HTML元素。

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

代码语言:javascript
复制
$escaped_newlines = str_replace("\r\n", '\r\n', $_POST['reading_text']);
$escaped_newlines = preg_replace('/\r\n/', '\r\n', $_POST['reading_text']);

(要进一步阅读,有一个关于双引号/单引号和解释换行符的有用的S.O.答案)

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

票数 3
EN

Stack Overflow用户

发布于 2019-03-05 02:52:54

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

代码语言:javascript
复制
%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

功能/urldecode/

我想您也可以在发布文本之前先对文本进行urlencode(),然后在另一端解码它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54994084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档