2011-11-28 49 views
0

我一直在访问stackoverflow.com很长一段时间,总是找到解决方案来解决我的问题。但这一次不同。这就是为什么我在这里发布我的第一个问题。在使用GET时削减文件夹名称中的特殊字符

情况看起来像这样:我的网站提供了一个目录资源管理器,允许用户将整个目录下载为zip文件。问题是当我想要下载一个包含特殊字符的dir时,我最终会遇到错误,即'C++'。我不想强迫用户不要用这些特殊字符命名文件夹,所以我需要关于这一个的线索。我注意到整个问题归结为GET协议。我使用例如AJAX POST推出该目录的内容,但作出一个.zip文件,下载它,我需要GET:

var dir_clicked = $(e.target).attr('path'); //let's say it equals '/c++' 
window.location = 'myDownloadSite.php?directory_path='+dir_clicked; 

我研究了整条赛道dir_clicked变量,一步一步,它似乎是在ADRESS变量被送到正确(我看到在浏览器中正确的网址),但打字:

echo $_GET['directory_path'] 
在myDownloadSite.php

打印

'/c' 

,而不是

'/c++' 

为什么GET协议正在削减我的优势?

+0

因为URL中的“+”被视为空格字符。 –

回答

0

您可以使用:

encodeURIComponent() //to get the url then use 
decodeURIComponent() //to decode and access ur filename. 

使用urlencode()urldecode()在服务器端。

+0

编码功能效果很好,但是我在服务器端进行了测试而没有解码,并且工作正常。 – matewka

0

也许使用encodeURIComponent(),然后删除所有%xx发生?

+0

我的javascript无法识别此功能... – matewka

+0

对不起,错字! http://www.w3schools.com/jsref/jsref_encodeURIComponent.asp是你正在寻找的(回答更新) –

+0

这是一种语法 - 它实际上是**编码** URIComponent(),它工作得很好!我不得不把它只放在我的url的最后部分(只是变量),因为函数编码也会削减字符 – matewka

0

尝试使用encodeURI(url) JavaScript函数对URI进行编码。

window.location = encodeURI('myDownloadSite.php?directory_path=' + dir_clicked); 
+0

你的建议几乎不错,因为它编码除了'+'和其他几个字符以外的所有字符;) – matewka

+0

你'对了!我相信问题在于,当PHP处理“+”信号时,它会将其转换为空格。改为使用'encodeURIComponent()',它可以正常工作。 – ramsvidor

0

当信息发布时,它被编码成特殊的字符,听起来就像你只需要在使用信息之前解码它们。

您可以使用PHP函数urldecode()在使用前将文件夹名称解码...

$_GET[directory_path]=urldecode($_GET[directory_path]); 
相关问题