我需要通过隐藏字段发布多行数据。数据将在发布后在文本区域中查看。如何在 html 表单中发布换行符/回车符?
我试过 \r\n 但这只是发布实际的“\r\n”数据
<input type="hidden" name="multiline_data" value="line one\r\nline two" />
有没有办法做到这一点?
我需要通过隐藏字段发布多行数据。数据将在发布后在文本区域中查看。如何在 html 表单中发布换行符/回车符?
我试过 \r\n 但这只是发布实际的“\r\n”数据
<input type="hidden" name="multiline_data" value="line one\r\nline two" />
有没有办法做到这一点?
而不是使用
<input type="hidden">
尝试使用
<textarea style="visibility:hidden;position:absolute;">
虽然 <input> 的隐藏状态在技术上允许新行(回车和换行),但为了与旧浏览器兼容,它们应该被转义。您可以通过将所有回车符 ( \u000D
or \r
) 和所有换行符 ( \u000A
or \n
) 替换为您的应用程序识别为回车符或换行符的专有字符串(如果存在于原始字符串中,也进行转义)。
简单的字符实体在这里不起作用,因为不合格的浏览器可能知道
并且
是新行并将它们从值中剥离。
例如,在 PHP 中,如果您要将echo
值传递给文本区域,您将包含换行符(和未转义的字符串)。
<textarea>一些带有 \ 的文本
和一个带有 \r\n 作为提交值的新行</textarea>
但是,在 PHP 中,如果您要为 <input> 标记echo
的value\r
属性赋值,您将使用您的专有字符串(例如和\n
)转义新行,并转义提交值中您专有字符串的任何实例。
<input type="hidden" value="包含 \\ 的一些文本\r\n 和一个新行 \\r\\n 作为提交值">
然后,在其他地方使用该值之前(插入数据库、发送电子邮件等),如有必要,请务必取消转义提交的值。
作为进一步的保证,我询问了 WHATWG,目前 HTML 规范的编辑 Ian Hickson 回答说:
bfrohs关于 <input type=hidden> 的问题——值中是否允许换行和回车?它们在文本状态和搜索状态中被明确禁止,但未提及隐藏状态。如果没有,是否有一个可接受的 HTML 解决方案来存储来自 textarea 的表单数据?
Hixie是的,它们是允许的 // iirc // 出于遗留原因,您可能希望将它们转义,尽管有些浏览器会将它们标准化 // 我忘记了我们是否修复了 // 在规范中
确实取决于字符集,但 应该是换行和 应该是回车。您应该能够在 value 属性中使用它们。
你没有说这是为了什么或者你正在使用什么技术,但你需要知道你不能相信隐藏字段保留 value="line one line two",因为恶意用户可以篡改在它在 POST 中发回之前使用它。由于您稍后将值放入 <textarea> 中,因此您肯定会受到例如跨站点脚本攻击,除非您在写回之前验证和/或清理您的“multiline_data”字段内容。
将值写入隐藏字段并将其读回时,通常最好将其保留在服务器上,作为会话或页面流的属性,或者您的环境提供的任何此类操作。