当word是以'#'字符开头的字符串时,PHP $ _GET ['word']无效

时间:2011-11-26 20:29:19

标签: php get

我正在使用谷歌可视化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 个答案:

答案 0 :(得分:4)

要将#符号用作get参数的值,必须对其进行URL编码。 URL中使用#符号表示文档中的命名锚点或ID,并且不会解析为_GET数组。

答案 1 :(得分:2)

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

网址中的文字#必须编码为%23才能正常使用。因此,您的网址为http://...../articles.php?word=%23nature&datetime=11-7-2011-5。然后var_dump($word);会显示string(7) "#nature"