2011-04-15 62 views
2

我通过URL传递数据,然后使用PHP的$ _GET []函数访问它。如果URL中有一个'#',那么GET请求似乎会截断字符串。例如,

http://example.com/yyy.php?version=0.88&value=ART:C_Sharp_%28programming_language%[email protected][email protected] d,F#,Java 5中,Nemerle,瓦拉平台 共同语言基础设施许可证 CLR专有常用的文件扩展名 的.cs网站升C编程在 维基C#(发音为/对ʃɑrp/ 看到尖锐)是一种多范式 编程语言涵盖 势在必行,声明性,功能性, 通用的,面向对象的 (类系),和面向组件 编程学科。@ 10902

$_GET['value']回报:

ART:C_Sharp_(programming_language)@多paradigm_programming_language @影响下d,F

是否有办法避免这种情况?我是否应该将发布到网址的值中的所有#去掉?

使用XMLHttpRequest()从客户端JavaScript代码访问URL位置。从JavaScript功能encodeURIComponent方法编码的字符串()是,

ART%3AC_Sharp_%2528programming_language%2529%40Multi-paradigm_programming_language%40Influenced%20D%2C%20F%23%2C%20Java%205%2C%20Nemerle%2C %20Vala%20Platform%20Common%20Language%20Infrastructure%20License%20CLR%20Proprietary%20Usual%20file%20extensions%20.cs%20Website%20C%20Sharp%20Programming%20AT%20Wikibooks%20C%23%20(发音%20%2F %CB%88si%CB%90%20%CB%88%CA%83%C9%91rp%2F%20see%20sharp)%图20是%20A%20multi范%20programming%20language%20encompassing%20imperative%2C%20declarative% 2C%20功能%2C%20基准%2C%20对象导向%20(基于类别)%2C%20和%20组件导向%20编程%20学科%8681

解码输出由 'yyy.php' 记录:

ART:C_Sharp_%28programming_language%29 @影响多paradigm_programming_language @ d,F#,Java 5中,Nemerle,瓦拉平台 共同语言基础设施许可证 CLR专有通常的文件扩展名 的.cs c网站夏普在 维基C#编程(发音/ËsiË ËʃÉ'rp/看到尖锐)是 多范式编程语言 包围势在必行,声明, 功能,通用的,面向对象的 (基于类)和面向组件的 编程学科。@ 8681

不使用encodeURIComponent方法()和应该是什么预期的结果记录的输出:

ART:C_Sharp_(programming_language)@影响多paradigm_programming_language @ d,F#,Java 5中,Nemerle ,瓦拉平台 共同语言基础设施许可证 CLR专有常用的文件扩展名 的.cs c网站夏普在 维基C#(发音为/对ʃɑrp/ 看到锋利)是一个多范式 编程啦编程nguage包围 势在必行,声明性,功能性, 通用的,面向对象的 (类系),和面向组件 编程学科。@ 8681

+0

检查更新后的答案。 – 2011-04-15 05:23:10

+0

你可以把网址放在那里,你的网址有'_%'? – 2011-04-15 06:02:41

+0

@experimentX:好的我编辑了.....现在我该如何完全恢复编码/变形字符? – VJune 2011-04-15 06:34:34

回答

5

一个URL串A #是一个片段标识符。在将该字符串添加到URL之前,您需要使用urlencode()

由于PHP无法访问URL碎片,因此您无法在您的yyy.php脚本中对此进行任何操作。

编号:http://en.wikipedia.org/wiki/Fragment_identifier

+1

啊对不起,我忘了提及.....这些值是使用XMLHttpRequest()从客户端JavaScript发送的。 JavaScript中的任何类似的函数来处理这个问题? – VJune 2011-04-15 05:17:08

1

你需要转义字符,因为它通常使用浏览器作为hashtag滚动到特定元素。

在PHP中,您在查询字符串中使用urlencode()函数。

1

#之后的URL部分是片段,永远不会发送到服务器。它仅由用户代理处理。您需要使用JavaScript与之交互。

虽然在您的示例中,您需要将其转义,以便从字面上理解其含义。正如其他人指出的那样,urlencode()非常适合这一点。

2

尝试传递参数编码urlencode()

header('Location: http://your_url?version=0.88&value='.urlencode('ART:C_Sharp_%28programming_language%[email protected][email protected] D, F#, Java 5, Nemerle, Vala Platform Common Language Infrastructure License CLR Proprietary Usual file extensions .cs Website C Sharp Programming at Wikibooks C# (pronounced /ˈsiː ˈʃɑrp/ see sharp) is a multi-paradigm programming language encompassing imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming [email protected]')); 

在JS你有

window.location = 'index.php?value='+encodeURIComponent('ART:C_Sharp_%28programming_language%[email protected][email protected] D, F#, Java 5, Nemerle, Vala Platform Common Language Infrastructure License CLR Proprietary Usual file extensions .cs Website C Sharp Programming at Wikibooks C# (pronounced /ˈsiː ˈʃɑrp/ see sharp) is a multi-paradigm programming language encompassing imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming [email protected]'); 

UPDATE

window.location = 'index.php?version=0.88&value='+encodeURIComponent('ART:C_Sharp_(programming_language)@[email protected] D, F#, Java 5, Nemerle, Vala Platform Common Language Infrastructure License CLR Proprietary Usual file extensions .cs Website C Sharp Programming at Wikibooks C# (pronounced /ˈsiː ˈʃɑrp/ see sharp) is a multi-paradigm programming language encompassing imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming [email protected]'); 

enter image description here

+0

只是在这里挑剔,但一个位置标题值应该是一个完整的URI,包括方案(HTTP,HTTPS等),主机和路径 – Phil 2011-04-15 04:57:41

+0

对不起,我忘了提及.....这些值从客户端发送JavaScript使用XMLHttpRequest的()。 JavaScript中的任何类似的函数来处理这个问题? – VJune 2011-04-15 05:17:46

+0

@ user518245有一个js函数uriencode – 2011-04-15 05:18:42

0

没有ü尝试parse_urlPHP_URL_FRAGMENT

echo parse_url($url, PHP_URL_FRAGMENT); 
+0

你可以在上述功能的帮助下操纵你的网址 – diEcho 2011-04-15 07:13:27