2009-12-24 65 views
1

我有一个像/ controller/action/var1/value1/var2/value2的Zend框架URI。Zend框架在PHP和Javascript中的URI空间编码

  1. Value2中有一个空格字符。我应该如何在PHP中进行编码?当我使用值为2的urlencode时,这将空间转换为'+'而不是'%20f'。这可以吗?

  2. 此值2也通过javascript在客户端添加到href位置。我在那里使用了转义函数,但是当我点击链接时,我在firefox地址栏中既没有看到“+”也没有看到“%20f”。虽然当我在firebug'net'标签中看到它时,我看到%20f。

我应该在PHP和JavaScript中使用哪些函数?

回答

2

关于你的第一个问题,那就是urlencoderawurlencode之间的区别:

var_dump(urlencode("hello, world")); 

会得到你:

string 'hello%2C+world' (length=14) 

虽然

var_dump(rawurlencode("hello, world")); 

将让你:

string 'hello%2C%20world' (length=16) 

我想两者都应该没问题;但随时给它一个尝试,以防万一;-)


关于第二点:火狐试图让网址“漂亮”,在人类可读的方式显示的编码,而不是他们, - 这对我们的开发人员不利,但对最终用户很好。

举例来说,如果我在Firefox的地址栏中输入此网址:

http://tests/temp/temp.php?a=hello%2C%20world 

当我按下进入键,它会自动如果它的工作方式,你翻译成

http://tests/temp/temp.php?a=hello%2C%20world 

正在做(并且,正如你看到一个编码的URL与萤火虫,它可能工作),一切都OK ;-)

+0

虽然我不确定,但我相信'%20'在URL的路径部分中比'+'更正确。 Javascript的'escape()'函数会给你非常类似PHP的'rawurlencode()'的行为,所以我建议在JS端使用它。 – pix0r 2009-12-24 15:16:54

+0

@pixor:为了保持一致性,您可能是对的:-) – 2009-12-24 15:18:23