#在查询字符串中断php GET


# in query string breaks php GET

遇到一个问题的形式,我已经建立。用户在地址字段中为他们的地址输入了一个散列(#)。当表单提交后,将它们的地址放入查询字符串中时,所有GET变量都将在带有#的字段后面中断。有人知道为什么会这样吗?是否需要将#转换为其他字符或使用其他类型的编码?这是我在页面上的代码,从查询字符串中获取值..

<?php echo $_GET["address"]; ?><br/> // if this field has a # in the value, the GET variables below do not work..
<?php echo $_GET["city"]; ?><br/>
<?php echo $_GET["state"]; ?>

#是URL中有效的锚符号,仅对客户端浏览器有意义。

在所有可能的情况下,您应该对这个表单使用POST而不是GET,在这一点上,这个问题就消失了。

通常一个好的经验法则是使用URL参数(GET)的情况下,您希望URL可被任何用户导航,而这种导航不会改变服务器上的任何数据(或做的事情,如触发电子邮件等)。这方面的一个很好的例子可能是在电子商务目录应用程序的URL中使用产品ID来确定在页面上显示什么产品。

你通常应该使用POST的情况下,你要改变服务器上的数据或触发一些操作,基本导航到一个页面不应该触发。在前面的电子商务应用程序示例的基础上,您通常可以使用POST向用户的购物车中添加商品。

get参数应该是url endcoded http://www.php.net/manual/en/function.urlencode.php另一个选项是建立您的查询字符串http_build_query (http://php.net/manual/en/function.http-build-query.php)

url中的散列是一个文档片段,由浏览器读取。因此,url中哈希符号之后的任何内容都不会作为查询传输到服务器。你需要URL编码哈希(通过javascript我假定)。参见:http://www.w3schools.com/tags/ref_urlencode.asp