使用PHP正确编码(相对)URL的方法

4

我正在尝试使用PHP编码以下相对URL:

/tracks/add/5449326

我尝试使用rawurlencode和urlencode。

这使得它看起来像这样:%2Ftracks%2Fadd%2F5449326

我将在AJAX调用中使用此URL。

我要调用的URL是:

/overlay/add-track/{param1}/{param2}

{param1}是一个ID号。

{param2}是经过编码的URL。

然而,当我尝试调用时,会出现404错误。

从外观上看,它正在尝试调用:

/overlay/add-track/1//tracks/add/5449326

看起来它似乎正在尝试访问解码后的字符串。

有什么想法如何修复这个问题吗?

PHP

$url = rawurlencode('/tracks/add/5449326');    
echo '<a href="/overlay/add-track/1/'.$url.'">Add</a>';

JS (jQuery)
将变量href赋值为$('a')标签的href属性。

$.ajax({
  url: href,
  type: 'POST',
  data: {},
  dataType: "json",
  success: function(data)
  {
    // do stuff
  }
});

编辑

  RewriteEngine on

  RewriteCond %{REQUEST_FILENAME} \.(eps|js|ico|gif|jpg|png|css|jpeg|doc|xls|doc|pdf|txt|ppt|zip)$
  RewriteRule ^(.*)$ $1 [L]

  RewriteCond "/path/public/%{REQUEST_URI}" !-f
  RewriteRule ^(.*)$ /index.php/$1 [L]

你不能只使用GET变量来获取{param2}吗?像这样:/overlay/add-track/{param1}?param2={param2} - Muhammad Yasir
如果您在地址栏中键入/overlay/add-track/1/%2Ftracks%2Fadd%2F5449326,会发生什么?当然,需要加上域名等前缀。 - Markus Hedlund
Base64编码和解码URL参数怎么样? - Sascha Galley
@Znarkus: 我收到了一个404错误。但是,如果我将斜杠编码更改为另一个字符,例如x,它就可以工作。 - PeeHaa
@Znarkus:已添加。@Muhammad:即使我会使用“param”方法,我仍然想知道为什么它不起作用。这就是我的风格 :) - PeeHaa
显示剩余4条评论
1个回答

0

编码的斜杠可能被Web服务器禁止,导致默认的404错误。

对于Apache,请参见:

http://httpd.apache.org/docs/current/mod/core.html#allowencodedslashes

要么需要更改Apache配置,要么需要通过替换斜杠/反斜杠为其他字符来解决问题。

编辑: 您可以尝试在JavaScript中进行双重urlencode,然后使用decodeURI()解码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接