URL GET变量具有必要的哈希符号

时间:2012-04-06 05:40:48

标签: php url

我正在创建一个url链接,其中一个GET变量中有一个哈希符号。网页将不会读取哈希标记后的任何数据。我不能把它拿出来有两个原因。

  1. 网站数据库(不是我以任何方式设计)具有各种数据项的哈希符号。我无权编辑数据库。而且我确定如果我做其他事情就会破裂。
  2. 我无法修改网址的网页。它是由其他人设计的,我再也没有任何编辑权限。
  3. 网址看起来像这样

             www.example.com?datapoint1=abc&datapoint2=#def
    

    其中#def是必需的,因为网页将在数据库中搜索这个确切的字符串。如果我可以编辑网页php我可以在必要时把哈希放进去,但正如我所说,我没有。

    进一步解释。用户收集数据(在Java应用程序中)并将数据放入长URL(如上面的示例,但更复杂),并通过此链接自动通过电子邮件发送给特定用户。第二个用户点击链接并执行他/她必须做的任何事情。

    我认为唯一的方法是编辑网页的php或javascript。任何想法,将不胜感激。

2 个答案:

答案 0 :(得分:4)

您必须将#编码为%23,因此您的网址如下所示:

www.example.com?datapoint1=abc&datapoint2=%23def

为了更容易,您可以使用PHP的内置urlencode函数:http://php.net/urlencode

答案 1 :(得分:1)

如果您不希望它成为哈希部分,则需要在URL中转义哈希值。 #的urlencoded字符为%23

您可以使用php中的urlencode()php.net doc)来转义php中的值。

您可能还想了解http_build_query_string(),它可以生成url查询并从键值数组中正确编码值。有关详细信息,请查看php.net examples

如果您无法访问PHP但可以使用JS(这是次优的),您可以创建一个小脚本,当它看到存在哈希值时重写该URL(仅当哈希值从不存在时才会起作用)

if(window.location.hash) {
    // Hash detected, lets rebuild the url
    window.location.href = window.location.href + '%23' + window.location.hash.slice(1);
}