我正在尝试将歌曲的歌词提交到文本区域。因此,这需要在我输出时保持换行。我知道以下事实:浏览器标准应使用\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
。
我在这里想念什么?
答案 0 :(得分:1)
关于flutter create .
属性,您不需要使用它来实现目标。如HTML 5.2 specification中所述,使用 wrap
或soft
属性选项时,文本内的换行符会保留。
仅当您要限制输入每一行的长度时才需要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_LOW
(http://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);