隐藏域有啥用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了隐藏域有啥用相关的知识,希望对你有一定的参考价值。
不是隐藏域不是别人也看不见,吗???
隐藏域的作用是自己想默认传递一些值,但又不想让自己或别人不小心修改到它,例如在修改一篇文章时<form name="form1" action="" method="post"><input type="text" name="title" id="title" value="这里是从数据库里读出来的标题"><textarea name="content" id="content">这里是从数据库里读出来的内容</textarea><input type="hidden" name="sid" id="sid" value="这里是从数据库里读出来的ID"><input type="submit" value="修改"></form>这里的隐藏域就是要把SID隐藏起来,如果你不小心修改了它,你再次提交回数据库里就会出错 参考技术A 可以上传值呀,不想让别人见到的值可以用它传 参考技术B asp.net里的吧。。 比如要传2个参数的话 用个哪东西就好办多了。。运行时客户端看不到。。 参考技术C 嗯 主要为自己提供一些注明!!Ruby on Rails 3 表单中的 _snowman 参数有啥用?
【中文标题】Ruby on Rails 3 表单中的 _snowman 参数有啥用?【英文标题】:What is the _snowman param in Ruby on Rails 3 forms for?Ruby on Rails 3 表单中的 _snowman 参数有什么用? 【发布时间】:2011-03-14 09:57:54 【问题描述】:在 Ruby on Rails 3(当前使用 Beta 4)中,我看到在使用 form_tag
或 form_for
助手时,有一个名为 _snowman
的隐藏字段,其值为 ☃ (Unicode \x9731)出现了。
那么,这是干什么用的?
【问题讨论】:
这是一个“文档”类型的问答 - 我试图在这里找到答案并最终挖掘了提交消息,所以我想我会在这里与其他想了解雪人的人分享。 .. 另见this。 【参考方案1】:此参数已添加到表单中,以强制 Internet Explorer(5、6、7 和 8)将其参数编码为 unicode。
具体来说,如果用户将浏览器的编码切换为 Latin-1,就会触发此错误。要了解为什么用户会决定做一些看似如此疯狂的事情,请查看this google search。一旦用户将网站设置为 Latin-1 模式,如果他们使用可以理解为 Latin-1 和 Unicode 的字符(例如,é 或 ç,在名称中很常见),Internet Explorer 会将它们编码为拉丁语-1.
这意味着如果用户搜索“Ché Guevara”,它将在服务器端错误地通过。在 Ruby 1.9 中,当文本不可避免地进入正则表达式引擎时,这将导致编码错误。在 Ruby 1.8 中,它会导致用户的结果损坏。
通过创建一个只能被 IE 理解为 unicode 字符的参数,我们强制 IE 查看 accept-charset 属性,然后告诉它将所有字符编码为 UTF-8,即使是那些可以用 Latin-1 编码。
请记住,在 Ruby 1.8 中,将 Latin-1 数据导入 UTF-8 数据库非常简单(因为整个堆栈中的 nothing 会检查用户发送的字节任何点都是有效的 UTF-8 字符)。因此,Ruby 应用程序(以及 PHP 应用程序等)表现出这种面向用户的 bug 是非常常见的,因此用户尝试更改编码作为一种缓解措施是非常常见的。
说了这么多,当我编写这个补丁时,我没有意识到参数的名称会出现在面向用户的地方(它会出现在使用 GET 操作的表单中,例如搜索表单)。既然如此,我们将把这个参数重命名为_e
,并使用一个看起来更无害的unicode字符。
【讨论】:
如果这最终是一个像_method这样的透明参数,它可能会少很多混乱。不过,这是多么疯狂的事情。 感谢 Yehuda 的详细回复——虽然我认为保留雪人是最好的结果,但它可能是“企业”会选择的那些愚蠢的事情之一——“这个雪人到底是什么东西?!?这是生意,不是游戏!'.. 呃。 @Matthew,奇怪的是你是对的。但我确实觉得这个解决方案令人印象深刻。 Snowman 已被一个名为 utf8 的隐藏输入取代,其值设置为“✓”。我为我的语言切换器使用了 form_tag 并开始出现很多异常,因为一个爬虫似乎有这个值的问题,并且错误地将 utf8 参数及其值与表单中的选择选项的值连接起来。【参考方案2】:这是为了支持 Internet Explorer 5 并鼓励它使用 UTF-8 的形式。
看到here的提交消息详细如下:
修复几个已知的网络编码问题:
在所有表单上指定接受字符集。所有最近的浏览器,以及 IE5+,将使用指定的编码 用于表单参数 不幸的是,IE5+ 不会查看接受字符集,除非至少有一个 表单值中的字符不是 在页面的字符集中。由于 用户可以覆盖默认值 字符集(Rails 设置为 UTF-8), 我们提供一个隐藏的输入,包含 一个 unicode 字符,强制 IE 查看接受字符集。 现在绝大多数 Web 输入都是 UTF-8,我们设置入站 UTF-8 的参数。这会 消除许多不兼容的情况 ASCII-8BIT 和之间的编码 UTF-8。 您可以放心地忽略 params[:_snowman]
总之,你可以放心地忽略这个参数。
不过,我不确定我们为什么要支持 Internet Explorer 5 等旧技术。如果你问我,这似乎是一个非常非 Ruby on Rails 的决定。
【讨论】:
报价单上写着“IE5+”,那么新的IE版本也可能出现问题? 如需更冗长的回复,请查看github.com/rails/rails/commit/…(另请参阅下面的回复)以上是关于隐藏域有啥用的主要内容,如果未能解决你的问题,请参考以下文章
easyUi隐藏域有个form表单 在关闭隐藏域出现校验提示
CDI 中的@ApplicationScoped 和@Singleton 作用域有啥区别?