2013-05-09 42 views
0

遇到了我已经构建的窗体的问题。用户在地址字段中输入散列(#)作为他们的地址。当提交表单后将他们的地址放入查询字符串中时,所有的GET变量都会在具有#的字段之后中断。任何人都知道为什么会发生?我是否需要将#转换为不同的字符或使用其他类型的编码?这是我从查询字符串抓住值页面上的代码..#查询字符串中断php 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"]; ?> 
+0

[有点相关](http://stackoverflow.com/questions/8528925/get-variable-with-messed-up-encoding) – George 2013-05-09 17:32:47

回答

0

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

很可能你应该使用POST来表示这个表单而不是GET,在这一点上这个问题就会消失。

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

对于要更改服务器上的数据或触发某个页面的基本导航不应触发的某些操作,通常应使用POST。基于前面的电子商务应用程序示例,您通常可以使用POST将项目添加到用户购物车。

-1
打造您的查询字符串

URL中的哈希是文档片段,并由浏览器读取。因此,在哈希登录URL之后的任何内容都不会作为查询传送到服务器。你需要URL编码散列(通过JavaScript我假设)。请参阅:http://www.w3schools.com/tags/ref_urlencode.asp