10

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

我试过 \r\n 但这只是发布实际的“\r\n”数据

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

有没有办法做到这一点?

4

4 回答 4

13

而不是使用

<input type="hidden">

尝试使用

<textarea style="visibility:hidden;position:absolute;">

于 2010-05-09T15:56:22.267 回答
9

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

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

例子

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

<textarea>一些带有 \ 的文本
和一个带有 \r\n 作为提交值的新行</textarea>

但是,在 PHP 中,如果您要为 <input> 标记echovalue\r属性赋值,您将使用您的专有字符串(例如和\n)转义新行,并转义提交值中您专有字符串的任何实例。

<input type="hidden" value="包含 \\ 的一些文本\r\n 和一个新行 \\r\\n 作为提交值">

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

放心

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

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

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

来源

于 2011-11-17T22:10:58.927 回答
5

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

于 2009-03-20T20:51:15.913 回答
2

你没有说这是为了什么或者你正在使用什么技术,但你需要知道你不能相信隐藏字段保留 value="line one line two",因为恶意用户可以篡改在它在 POST 中发回之前使用它。由于您稍后将值放入 <textarea> 中,因此您肯定会受到例如跨站点脚本攻击,除非您在写回之前验证和/或清理您的“multiline_data”字段内容。

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

于 2009-03-20T21:14:00.897 回答