将换行符/回车符发布为隐藏字段值
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】:而不是使用
<input type="hidden">
尝试使用
<textarea style="visibility:hidden;position:absolute;">
【讨论】:
style="display:none;"
可能更简洁
@daiscog 表单元素设置为display:none
aren't always submitted。我不确定哪些浏览器会提交和不提交 display:none
字段,但根据该答案下的 cmets,IE8 确实 not。【参考方案2】:
虽然在 的 hidden 状态下技术上允许新行(回车和换行),但它们应该被转义以与旧浏览器兼容。您可以通过将所有回车符(\u000D
或 \r
)和所有换行符(\u000A
或 \n
)替换为您的应用程序识别为回车符或换行符的专有字符串(以及如果存在于原始字符串中,也会转义)。
简单的字符实体在这里不起作用,因为不符合标准的浏览器可能知道
&#10;
和&#13;
是新行并将它们从值中剥离。
示例
例如,在 php 中,如果您要将 echo
传递的值传递给文本区域,您将包含换行符(和未转义的字符串)。
然而,在 PHP 中,如果您要将 echo
的值添加到 标记的 value 属性中,您将使用您的专有字符串转义新行(例如 \r
和\n
),并在提交的值中转义您专有字符串的任何实例。
然后,在其他地方使用该值之前(插入数据库、发送电子邮件等),如有必要,请务必取消转义提交的值。
放心
作为进一步的保证,我询问了 WHATWG,目前 HTML 规范的编辑 Ian Hickson 回答:
bfrohs 关于 的问题 -- 值中是否允许换行和回车?它们在文本状态和搜索状态中被明确禁止,但未提及隐藏状态。如果没有,是否有一个可接受的 HTML 解决方案来存储来自 textarea 的表单数据?
Hixie 是的,它们是允许的 // iirc // 出于遗留原因,您可能希望转义它们,尽管有些浏览器会将它们标准化 // 我忘记了我们是否修复了它 // in规格
Source
【讨论】:
【参考方案3】:实际上取决于字符集,但 应该是换行和 应该是回车。您应该能够在 value 属性中使用它们。
【讨论】:
如果浏览器支持表单提交,它很可能也会意识到&#10;
和&#13;
是新行,如果它错误地删除了新行,它也会删除所有出现的@987654323 @ 和 &#13;
.【参考方案4】:
你没有说这是为了什么或你正在使用什么技术,但你需要知道你不能相信隐藏字段保留在 value="line one 第二行”,因为恶意用户可以在它被发送回 POST 之前对其进行篡改。由于您稍后将值放入
将值写入隐藏字段并读回时,通常最好将其保留在服务器上,作为会话或页面流的属性,或您的环境提供的任何执行此类操作的属性。
【讨论】:
以上是关于将换行符/回车符发布为隐藏字段值的主要内容,如果未能解决你的问题,请参考以下文章