将换行符/回车符发布为隐藏字段值

Posted

技术标签:

【中文标题】将换行符/回车符发布为隐藏字段值【英文标题】:Post newline/carriage return as hidden field value 【发布时间】:2010-10-14 15:39:34 【问题描述】:

我需要通过隐藏字段发布多行数据。数据将在发布后在文本区域中查看。如何在 html 表单中发布换行符/回车符?

我已经尝试过\r\n,但这只是发布了实际的“\r\n”数据

<input type="hidden" name="multiline_data" value="line one\r\nline two" />

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

而不是使用

&lt;input type="hidden"&gt;

尝试使用

&lt;textarea style="visibility:hidden;position:absolute;"&gt;

【讨论】:

style="display:none;" 可能更简洁 @daiscog 表单元素设置为display:none aren't always submitted。我不确定哪些浏览器会提交和不提交 display:none 字段,但根据该答案下的 cmets,IE8 确实 not【参考方案2】:

虽然在 hidden 状态下技术上允许新行(回车和换行),但它们应该被转义以与旧浏览器兼容。您可以通过将所有回车符(\u000D\r)和所有换行符(\u000A\n)替换为您的应用程序识别为回车符或换行符的专有字符串(以及如果存在于原始字符串中,也会转义)。

简单的字符实体在这里不起作用,因为不符合标准的浏览器可能知道 &amp;#10;&amp;#13; 是新行并将它们从值中剥离。

示例

例如,在 php 中,如果您要将 echo 传递的值传递给文本区域,您将包含换行符(和未转义的字符串)。

然而,在 PHP 中,如果您要将 echo 的值添加到 标记的 value 属性中,您将使用您的专有字符串转义新行(例如 \r\n),并在提交的值中转义您专有字符串的任何实例。

然后,在其他地方使用该值之前(插入数据库、发送电子邮件等),如有必要,请务必取消转义提交的值。

放心

作为进一步的保证,我询问了 WHATWG,目前 HTML 规范的编辑 Ian Hickson 回答:

bfrohs 关于 的问题 -- 值中是否允许换行和回车?它们在文本状态和搜索状态中被明确禁止,但未提及隐藏状态。如果没有,是否有一个可接受的 HTML 解决方案来存储来自 textarea 的表单数据?

Hixie 是的,它们是允许的 // iirc // 出于遗留原因,您可能希望转义它们,尽管有些浏览器会将它们标准化 // 我忘记了我们是否修复了它 // in规格

Source

【讨论】:

【参考方案3】:

实际上取决于字符集,但 应该是换行和 应该是回车。您应该能够在 value 属性中使用它们。

【讨论】:

如果浏览器支持表单提交,它很可能也会意识到&amp;#10;&amp;#13;是新行,如果它错误地删除了新行,它也会删除所有出现的@987654323 @ 和 &amp;#13;.【参考方案4】:

你没有说这是为了什么或你正在使用什么技术,但你需要知道你不能相信隐藏字段保留在 value="line one 第二行”,因为恶意用户可以在它被发送回 POST 之前对其进行篡改。由于您稍后将值放入

将值写入隐藏字段并读回时,通常最好将其保留在服务器上,作为会话或页面流的属性,或您的环境提供的任何执行此类操作的属性。

【讨论】:

以上是关于将换行符/回车符发布为隐藏字段值的主要内容,如果未能解决你的问题,请参考以下文章

在 textarea 字段中保留回车符 (Hex 0D)

如何在sql server 数据库的字段加入回车符和换行符

关于MYSQL表记录字段换行符回车符处理

在编辑器中查看换行符和回车符

C语言中回车符和回车换行符有啥区别

在sql server 数据库字段中如何加入回车符和换行符?