关于连接路径含有汉字空格的问题

mynull 2003-08-19 09:41:09
页面中的连接,如 <img 中的 src ,或者<a 中的href,由于路径中含有汉字或空格,所以需要编码。采用server.UrlEncode 或 UrlPathEncode 后,空格成了 + 号,http:// 成了http%3a%2f%2f,每次我都要再采用 几次 replace函数,才能得到 http://%xx%xx/%xx%20(空格为%20)%xx 等这样的正确形式,经saucer(思归, MS .NET MVP)指点,可以在web.config中
<system.web>
<globalization requestEncoding="GB2312" responseEncoding="GB2312" uiCulture="zh-CN" culture="zh-CN" fileEncoding="GB2312" />
</system.web>
如此设置,而不必用UrlEncode.
当时问题解决了,后来发现不对。当我把站点发到目标服务器时,所有含汉字的连接都不对,目标机器的machine.config web.config 与测试机完全相同的,环境也是一样的。
只有客户IE中把总是以UTF-8发送连接的选项去掉才正确,但该选项默认是选中的,让每个客户更改设置不太好。况且在测试机就没有这个问题,即无论UTF-8的选项如何,都是正确的。
究竟造成这种问题的根本原因是什么?
...全文
183 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2003-08-27
  • 打赏
  • 举报
回复

shared function MyEvalMatch(ByVal m as Match) as string
return System.Web.HttpUtility.UrlEncode(m.Value,System.Text.Encoding.GetEncoding("GB2312"))
end function

dim s as string = "http://localhost/hello/ax目标服务器时 ,.asp?x=目 标"
dim s2 as string = Regex.Replace(s,"[\u4e00-\u9fa5]+",new MatchEvaluator(Addressof MyEvalMatch))
Console.Write(String.Format("old:{0} new:{1}", s, s2))
mynull 2003-08-26
  • 打赏
  • 举报
回复
抱歉,我对C#不熟悉,直接运行上述程序总出错,改成VB.net后也一样。
saucer 2003-08-24
  • 打赏
  • 举报
回复
>>>>当我把站点发到目标服务器时,所有含汉字的连接都不对,目标机器的machine.config web.config 与测试机完全相同的,环境也是一样的

if everything is same, how could it not be working?

anyway, try something like

static string MyEvalMatch(Match m)
{
return System.Web.HttpUtility.UrlEncode(m.Value,System.Text.Encoding.GetEncoding("GB2312"));
}


string s = "http://localhost/hello/ax目标服务器时 ,.asp?x=目 标";

string s2 = Regex.Replace(s,@"[\u4e00-\u9fa5]+",new MatchEvaluator(MyEvalMatch));

Response.Write(String.Format("old:{0}\nnew:{1}", s, s2));

mynull 2003-08-24
  • 打赏
  • 举报
回复
哎,都看懂问题了吗,用UrlEncode(),有几个不知道呀。
gOODiDEA 2003-08-22
  • 打赏
  • 举报
回复
直接用 HttpUtility.UrlEncode()
mynull 2003-08-22
  • 打赏
  • 举报
回复
dim s as string = "http://xxx.xxx.com/我的图片.gif"
label1.text = "<a href='" + server.UrlEncode(s) + "'>图片</a>"

楼上的,44这个代码,编码后 :// 都变了,成了%xx%xx%xx, 这时连接无效,难道你们都没有这种情况?所以我要用replace 把 :和 / 变过来。

另外我说过,我发有的服务器可以直接接收汉字路径,有的就不,但他们的平台、配置、版本都是一样的,所以我才困惑。
chenee543216 2003-08-20
  • 打赏
  • 举报
回复
server.UrlEncode--->then Server.UrlDecode;

不就可以了吗?干吗还要几次的Replace?

至于原因??嘿嘿,不知道,想知道
chnking 2003-08-20
  • 打赏
  • 举报
回复
我这web.config中这样设置:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

浏览器中也是"总是以UTF-8发送" 选上

在<a> 标签中href中也含有中文和空格:
<a id="HyperLink1" href="/test/金 剑 忠.aspx" target="_self" style="Z-INDEX: 103; LEFT: 186px; POSITION: absolute; TOP: 357px">HyperLink</a>
点击连接后.浏览器地址栏上是这样:
http://localhost/test/金%20剑%20忠.aspx

访问完全正常啊
  • 打赏
  • 举报
回复
这个问题我也遇到过!

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧