Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么';我的表单文本区域中的新行发生了什么情况?_Php_Forms - Fatal编程技术网

Php 什么';我的表单文本区域中的新行发生了什么情况?

Php 什么';我的表单文本区域中的新行发生了什么情况?,php,forms,Php,Forms,我有一个由textarea组成的非常简单的表单。在textarea中是我想要保存到数据库的标记语法。显然,保留任何回车/换乘线路非常重要 但是,在提交表单时,除非我使用nl2br()PHP函数,否则新行似乎不会发送到服务器 在服务器上,我获取消息文本区域的内容,如下所示: $content = $_POST['message']; 如果我重复这一点: echo $content; 文本在一条长线上 如果我回应: echo nl2br($content); 它按预期显示内容。为什么会这样?我

我有一个由textarea组成的非常简单的表单。在textarea中是我想要保存到数据库的标记语法。显然,保留任何回车/换乘线路非常重要

但是,在提交表单时,除非我使用
nl2br()
PHP函数,否则新行似乎不会发送到服务器

在服务器上,我获取消息文本区域的内容,如下所示:

$content = $_POST['message'];
如果我重复这一点:

echo $content;
文本在一条长线上

如果我回应:

echo nl2br($content);

它按预期显示内容。为什么会这样?我假设如果我只是将$content的值保存到数据库中,那么新行字符将被保留?

浏览器将新行作为LF字符(
\n
)提交

如果输出这些内容,浏览器将不会显示它们,因为它会在正常HTML呈现模式下忽略换行符。只有将它们转换为

标记时,浏览器才会识别它们

尝试将内容类型设置为
text/plain
,您将看到浏览器也呈现换行符:

header('Content-type: text/plain');
echo $content;

将未格式化的数据保存到数据库中,即不要将其转换为标签。在输出数据时执行此转换。

浏览器将换行符提交为LF字符(
\n

如果输出这些内容,浏览器将不会显示它们,因为它会在正常HTML呈现模式下忽略换行符。只有将它们转换为

标记时,浏览器才会识别它们

尝试将内容类型设置为
text/plain
,您将看到浏览器也呈现换行符:

header('Content-type: text/plain');
echo $content;

将未格式化的数据保存到数据库中,即不要将其转换为标签。在输出数据时执行此转换。

或者,您可以输出
pre
标记内的文本或使用
空白:pre-line设置样式的元素
或者,您可以输出
pre
标记内部的文本,或者使用
空白:pre-line设置样式的元素浏览器不接受换行符/回车符。它们被视为空间,并按空间进行渲染。这就是nl2br工作的原因。它将
\n
\r
字符替换为html

标记。如果您在页面上进行了“查看源代码”,您会看到原始源代码中确实包含换行符。永远不要相信你的浏览器显示的内容,因为它的工作就是欺骗你。浏览器不尊重换行符/回车符。它们被视为空间,并按空间进行渲染。这就是nl2br工作的原因。它将
\n
\r
字符替换为html

标记。如果您在页面上进行了“查看源代码”,您会看到原始源代码中确实包含换行符。永远不要相信你的浏览器所显示的,因为它的工作就是欺骗你。