我有图片:
http://localhost/WOZNIAK.png
这很好。但是,如果我使用此规则重写URL:
<rewrite url="~/images/articles/(.*)$" to="~/handlers/displayimage.ashx?src=$1&type=article" processing="stop"/>
访问此网址:
http://localhost/images/articles/WOZNIAK.png
它不显示图像。我的处理程序以代码开头:
public void ProcessRequest (HttpContext context) {
string ImageSrc = context.Request.QueryString["src"];
string ImageType = context.Request.QueryString["type"];
如果我取ImageSrc
值,则输出为:
WOŹNIAK.png
如果我在代码中明确将ImageSrc
设置为值ImageSrc = "WOZNIAK.png";
,则图片显示正常。
我需要做些什么才能让这些Unicode字符正常传递?这对我们来说是非常有问题的,因为我们让世界各地的用户上传大量图像,其中一些包含许多带有Unicode字符的名称。
由于设计的原因,以任何方式重命名或修改这些图像是非常有问题的,所以我真的想要解决这个问题!
修改
看来我应该Server.UrlEncode
所有查询字符串参数。这可能是原因吗?我不确定是否可以在URL重写规则中执行此操作?
如果我将字符串设置为:
ImageSrc = context.Server.UrlDecode("WO%c5%b9NIAK.png");
有效。所以我想问题是在重写规则中编码查询字符串参数的URL。
答案 0 :(得分:2)
我修好了。 Intelligencia具有URL编码变换,可以使用如下所示:
<rewrite url="~/images/articles/(.*)$" to="~/handlers/displayimage.ashx?src=${encode($1)}&type=article" processing="stop"/>
然后在代码中显示如下图像:
string ImageSrc = context.Server.UrlDecode(context.Request.QueryString["src"]);