1

我正在使用 php 编写一个表单,该表单有一个 textarea,数据使用$_POST;发送到脚本。然后存储到数据库中。问题是当文本框被填充并且如果用户不按回车来换行但是他等到文本区域的宽度结束时存储在数据库中的文本都在一行中,例如,如果他写道:

您好,这是文本,它涵盖了TE <= 文本框结尾(无 br 无 /n) XTAREA 的所有宽度。

即使当您达到文本框的最大宽度时,文本也会换行。当我用查询打印消息时,结果都在一行中(这搞砸了我的网站布局)

我已经设法使用以下代码记录用户 ENTER 笔划:

$cleaned_message=str_replace(Chr(13),'<br>', $cleaned_message);

但我不知道如果他不使用 ENTER KEY 该怎么办。

4

2 回答 2

1

您在帖子的第一部分中描述的是正常且正确的行为。文本被包裹在 textarea 中,只要用户没有按回车键,它就会被解释为一行。由用户指定他想在哪里换行,而不是 textarea。

损坏的很可能是您的布局。尝试定义输出元素的宽度(我猜这也是一个textarea),所以输出被包裹在元素中,而不是元素调整到输出。

您能否使用打印结果的部分布局更新您的帖子?

于 2012-03-31T17:02:28.510 回答
1

如果用户不使用 Enter 键(并且不以其他方式插入换行符,例如通过复制和粘贴具有换行符的文本),则数据中没有真正的换行符,如存储在 DOM 中并提交于表单数据。浏览器根据需要将文本分成几行以使其适合,但换行符是“软的”,只是视觉呈现。

用户输入的换行符作为 CR、LF 对(回车、换行)传输。在默认的表单数据编码中,这意味着%0D%0A. 你对它们做什么取决于上下文。换行符可能被保留并解释为段落分隔符或内容重要的换行符(例如,在邮政地址、诗歌和计算机代码中),或者它们可能被空格替换。

没有办法也不需要在服务器端处理浏览器生成的换行符,因为它们不会到达服务器。

但是,如果textarea元素具有 (nonstandard) 属性wrap=hard,则浏览器生成的换行符将成为真正的换行符(并且它们与用户输入的换行符无法区分)。该属性wrap=off防止自动换行:一行可以任意长,并根据需要出现水平滚动。

于 2012-03-31T17:02:36.887 回答