【问题标题】:Zend Framework URI space encoding in PHP and JavascriptPHP 和 Javascript 中的 Zend Framework URI 空间编码
【发布时间】:2009-12-24 15:08:20
【问题描述】:

我有一个 Zend Framework URI,例如 /controller/action/var1/value1/var2/value2 。

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

  2. 这个 value2 也被客户端的 javascript 添加到一个 href 位置。我在那里使用了转义功能,但是当我单击链接时,我在 Firefox 地址栏中既看不到“+”也看不到“%20f”。虽然当我在 firebug 'net' 选项卡中看到它时,我看到了 %20f。

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

【问题讨论】:

    标签: php javascript uri encode


    【解决方案1】:

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

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

    会得到你:

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

    虽然

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

    会得到你:

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

    我想两者都应该没问题;但请随意尝试一下,以防万一;-)


    关于第二点:Firefox 试图让 URL “更漂亮”,以人类可读的方式显示它们,而不是编码——这对我们开发人员不利,但对最终用户来说很好。

    例如,如果我在 Firefox 的地址栏中输入此 URL:

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

    当我按下 enter 键时,它会自动翻译成

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

    如果它以您的方式工作(并且,当您看到使用 Firebug 的编码 URL 时,它可能工作),一切正常 ;-)

    【讨论】:

    • 我相信,尽管我不确定,%20 在 URL 的路径部分中比 + 更正确。 Javascript 的 escape() 函数会给你与 PHP 的 rawurlencode() 非常相似的行为,所以我建议在 JS 端使用它。
    • @pixor :为了保持一致性,你可能是对的 :-)
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2012-06-07
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2011-09-24
    相关资源
    最近更新 更多