PHP $ _GET ['word']当word是以'#'字符开始的字符串时不起作用

问题描述:

我正在使用google可视化api来制作一个情节,然后使用事件处理来获取点击该情节时的一些信息上。

当我点击的项目,我打开一个新的窗口,以下网址这是应该显示来自一个叫做articles.php脚本结果

http://..../articles.php?word=nature&datetime=11-4-2011-8

articles.php与

开始
$word = $_GET['word']; 
$datetime = $_GET['datetime']; 

当我用var_dump调试如下:

var_dump($word); 
var_dump($datetime); 

我得到string(6) "nature" string(11) "11-4-2011-8",脚本的其余部分工作。

不过,我遇到的问题是,如果这个词是格式如下:

word = "#someword"

然后我仍然看到以下网址

http://...../articles.php?word=#nature&datetime=11-7-2011-5

但脚本在articles.php不起作用。在使用

var_dump($word); 
var_dump($datetime); 

我看到以下内容:

 
string(0) "" NULL 

我不明白为什么$_GET['word']$_GET['datetime]不再工作,抢在URL传送的字和日期的字包含“#”作为第一个字符。任何关于正在发生的事情的指针以及我如何解决这个问题?

谢谢!

+2

默认情况下,#标记不属于查询字符串(?) – supertopi

+0

的所有url的片段部分#(#包含的)之后的所有内容都不会发送到您的服务器。这是一个浏览器的东西afaik – malletjo

对于要用作get参数值的#符号,它必须是URL编码的。 #符号用于URL中以表示文档中的指定锚点或ID,并且不会解析为_GET阵列。

+0

伟大的,谢谢,这是非常有用的! – msohail

#字符表示URL fragment的开头。如果将数据发送到服务器,则该数据将不会按照与普通$_GET参数相同的方式进行解码。

URL中的文字#必须编码为%23才能正常工作。所以你的网址是http://...../articles.php?word=%23nature&datetime=11-7-2011-5。然后var_dump($word);将显示string(7) "#nature"