我正在编写一个Web应用程序,动态根据某些输入创建URL,以供客户在其他时间使用。为了便于讨论,这些URL可以包含某些字符,例如正斜杠(即'/'),它不应被解释为实际URL的一部分,而只是作为参数。例如:
http://mycompany.com/PartOfUrl1/PartOfUrl2/ArgumentTo/Url/GoesHere
正如您所看到的, ArgumentTo / Url / GoesHere 确实有正斜杠,但这些应该被忽略或转义。
这可能是一个不好的例子,但手头的问题更为通用,适用于其他特殊字符。
鉴于一些答案,我意识到我没有指出一些希望有助于澄清的内容。
我想保持这种语言不可知,因为如果客户端可以提出请求会很好。例如,如果客户端知道它想要传递 ArgumentTo / Url / GoesHere ,那么如果它可以编码到唯一那就太棒了>服务器可以转向的字符串,解码使用它。
我们可以假设.NET Framework中的HttpUtility.HtmlEncode / HtmlDecode等类似函数可以在其他系统/平台上使用吗?网址不一定是漂亮,因此路径中的真实单词并不重要。
似乎base64编码/解码在任何平台/语言上都相当容易。
答案 0 :(得分:5)
你没有说你正在使用哪种语言,但PHP有一个有用的urlencode
函数,而C#有HttpUtility.URLEncode
和Server.UrlEncode
,它们可以很好地编码你的部分URL。 / p>
如果您需要其他方式this page有一个编码值列表。例如:/ == %2f
。
根据你的更新,我会说使用Voyagerfan的URLRewriting想法来制作类似的东西:
http://www.example.com/([A-Za-z0-9/]+) http://www.example.com/?page=$1
然后使用应用程序GET解析器将其过滤掉。
答案 1 :(得分:3)
您可以使用Apache rewrites将http:// mycompany.com/PartOfUrl1/PartOfUrl2
重写为http:// mycompany.com/path/to/program.php
,然后将ArgumentTo/Url/GoesHere
作为标准GET参数传递。那么服务器实际发回的是http:// mycompany.com/path/to/program.php?arg=ArgumentTo/Url/GoesHere
重写是防范技术变更的好方法(例如,从PHP切换到ASP,不会更改您的URL)并同时为您的用户提供友好的URL。
使用您的示例网址并根据我之前所说的内容构建,我会说在httpd.conf或.htaccess中使用此代码:
RewriteEngine On
RewriteRule http:// mycompany.com/PartOfUrl1/PartOfUrl2/([A-Za-z0-9]) http://mycompany.com/path/to/program.php?arg=$1
(顺便说一句,删除http://
中第一个RewriteRule
后的空格,加上该行需要包含没有换行符。)
更改路径,文件名,arg名称等都可以。这里的关键部分是正则表达式(([A-Za-z0-9])
)和$1
。
答案 2 :(得分:1)
是的,Base64编码您的参数将适用于您,但是您需要确保您的整个URL低于目标浏览器的大小限制(IE 4 - 7,according to this page为2083个字符)。
答案 3 :(得分:0)
我相信你正在寻找的东西,如果使用.net,就是HttpUtility.EncodeUrl()方法,因为它有许多覆盖。看这里:http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx
答案 4 :(得分:0)
在服务器对象上使用HtmlEncode和Decode方法。我相信这将删除大多数不应该的字符,并处理其他事情,如空格等。
以下是MSDN文章:http://msdn.microsoft.com/en-us/library/ms525347.aspx