'#'和$ _SERVER ['PHP_SELF']之间的区别

时间:2011-10-21 14:58:03

标签: php html

只是一个普遍的问题。在表单操作方面,如果表单提交到其父页面,我意识到您可以使用“”或“#”来提交表单。现在我的问题是在编写一个同时包含处理程序和表单的php页面时,我被告知最好编写一个这样的表单操作:

action="<?php echo $_SERVER['PHP_SELF'] ?>"
//or
action="<?php echo $_SERVER['SCRIPT_NAME'] ?>"

现在,如果您可以使用“#”将表单提交给自己,或者只是不设置表单操作,那么为什么还需要添加此内联脚本?我只是好奇,因为补充说php确实会产生笨重而凌乱的外观形式代码(看起来已经笨重且看起来很乱)。

我也明白,在您不使用PHP的情况下可以使用备用'#'和“”,但我想真正的问题是为什么在不需要PHP的情况下添加PHP(在实例中表单提交到php页面。)

感谢, 布罗迪

Mahalo的所有回应。我意识到使用PHP代码生成url可能(在大多数情况下)是要采取的路径,因为只需更新浏览器或HTML就可以说“”和“#”无效运营商提交到根页面。另外我知道'#'用于在同一页面上引用一个锚点,但我想我会看到每个人对它的看法。

3 个答案:

答案 0 :(得分:5)

首先,简单的部分是:为什么首先要将某些内容放入action的值中。

好吧,the HTML 4 spec says(强调我的):

  

action = uri

     

此属性指定表单处理代理。   HTTP URI以外的值的用户代理行为是未定义

因此,虽然几乎所有的浏览器最终都会将表单提交给脚本本身,但技术上这是一个你完全不应该依赖的快乐巧合。但是,这是not a problem for HTML 5

此外,根据W3C的定义,#本身并不是有效的URI,因此也应该排除它为无效。

现在换另一半:如何在PHP中获取当前URL。

对于基本用法,您可以使用$_SERVER['REQUEST_URI']$_SERVER['PHP_SELF']中的任意一个,具体取决于您是否要在当前网址中保留任何GET参数(PHP_SELF将不包括他们,但REQUEST_URI会。)

在更高级的场景中(例如使用框架编写代码),最好使用框架自己的URL生成实用程序函数为您生成URL(这会考虑路由等,因此更可取)。< / p>

更新:我误读了HTML 5规范,该规范说您可以将操作留空。

答案 1 :(得分:1)

使用#并不是真正的正确方法,尽管它可行。您会发现URL末尾的#应该用于将页面向下滚动到与其匹配的页面上的锚点。表单应使用操作字段中的URL。以任何其他方式执行它并没有错,但它更多地与可访问性和可用性有关(一些JS库使用#url)

答案 2 :(得分:0)

tl; dr - 留空。

使用现代框架和网址重写,这实际上是一种不好的做法。您的php脚本很可能与访问它的URI路径不同。