我正在使用php编写表单,表单有一个textarea,数据使用$_POST
发送到脚本;然后存储到db。
问题是当填充文本框时,如果用户没有按Enter键进行换行,但他等到textarea宽度的末尾,则存储在db中的文本全部在一行中,例如他想:
你好这是文字,它涵盖了TE的所有宽度< =文本框的结尾(没有br / n) XTAREA。
即使达到文本框的最大宽度,文本也会换行。 当我用查询打印消息时,结果全部在一行(这搞砸了我的网站布局)
我已设法使用以下代码记录用户输入笔画:
$cleaned_message=str_replace(Chr(13),'<br>', $cleaned_message);
但如果他不使用ENTER KEY,我无法弄清楚该做什么。
答案 0 :(得分:1)
您在帖子的第一部分描述的内容是正常且正确的行为。文本包含在textarea中,只要用户没有按Enter键,就会将其解释为一行。用户可以指定他想要新行的位置,而不是textarea。
最糟糕的是你的布局。尝试定义输出元素的宽度(我猜这也是一个textarea),所以输出包含在元素中,而不是元素调整到输出。
您是否可以使用打印结果的部分布局来更新帖子?
答案 1 :(得分:1)
如果用户不使用Enter键(并且不插入换行符,例如通过复制和粘贴包含换行符的文本),则数据中没有真正的换行符,如存储在DOM和在表单数据中提交。浏览器根据需要将文本分成几行以使其适合,但换行符是“柔和的”,只是视觉渲染。
用户输入的换行符作为CR,LF对传送(回车,换行)。在默认表单数据编码中,这意味着%0D%0A
。你用它们做什么取决于上下文。换行符可能会被保留并解释为段落符号或内容重要的换行符(例如,在邮政地址,诗歌和计算机代码中),或者它们可能会被空格替换。
没有办法也不需要处理浏览器生成的服务器端换行符,因为它们没有到达服务器。
但是,如果textarea
元素具有(非标准)属性wrap=hard
,则浏览器生成的换行符将成为实际换行符(并且它们与用户输入的换行符无法区分)。属性wrap=off
阻止自动换行:换行可以任意长,并根据需要显示水平滚动。