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

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的选项如何,都是正确的。
究竟造成这种问题的根本原因是什么?
...全文
155 9 打赏 收藏 转发到动态 举报
写回复
用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

访问完全正常啊
  • 打赏
  • 举报
回复
这个问题我也遇到过!
WinRAR流行好用的压缩工具,支持鼠标拖放及外壳扩展,完美支持 ZIP 档案,内置程序可以解开 CAB、ARJ、LZH、TAR、GZ、ACE、UUE、BZ2、JAR、ISO 等多种类型的压缩文件;具有估计压缩功能,你可以在压缩文件之前得到用 ZIP 和 RAR 两种压缩工具各三种压缩方式下的大概压缩率;具有历史记录和收藏夹功能;压缩率相当高,而资源占用相对较少、固定压缩、多媒体压缩和多卷自释放压缩是大多压缩工具所不具备的;使用非常简单方便,配置选项不多,仅在资源管理器中就可以完成你想做的工作。 3.9 官方简体中文正式版 更新日志: 1. 64 位版本的 WinRAR 可用了。如果你使用的是 64 位 Windows 操作系统, 我们强烈 推荐您安装 64 位的 WinRAR 版本。它提供了比 32 位版本更高的性能和较好的外壳集成。 2. 改进了 RAR 在多核、多 CPU 系统下的压缩速度。改进了在 Vista 和 Windows 7 操作系统下大多数显而易见的问题。 3. 在“设置/压缩”对话框中的“删除解压路径中重复的文件夹”选项, 被更通用的“删除解压路径中多余的文件夹”选项替换。 如果你使用“解压到”关联菜单命令解压一个压缩文件、根文件夹仅包含一个文件夹并且没有文件, 则该选项将从解压路径中删除基于文件夹的多余压缩文件名称。 4. 在“解压路径和选项”对话框中的修改: a) “新建文件夹”按钮在当前选定的文件夹创建一个新的子文件夹; b) F2 键重命名在文件夹树选定的文件夹; c) F5 键刷新树形窗格中的内容; d) Del 键删除在文件夹树中选定的文件夹。 5. 如果你希望在 WinRAR 外壳文件列表中看到文件日期中的秒钟, 你可以在“设置/文件列表”对话框启用“显示秒钟”选项。 6. 在“设置/综合/关联菜单项目”对话框中的“自解压文件检查位置”选项组让你在关 联菜单中控制自解压文件的处理。 例如, 如果你在较慢的网络磁盘上频繁地使用鼠标右键单击 ".exe" 文件, 在显示关联菜单前, 你可以关闭“网络磁盘”选项为最小延迟。 7. 如果你在 WinRAR 外壳的文件列表中按名称进行排序, WinRAR 将采用与 Windows 资源管理器相同的新式逻辑文件名称排序, 即, 按文件名称的数字值排序。因此文件将按 1.txt, 2.txt, 10.txt 的方式排序, 而不是上一版的 1.txt, 10.txt, 2.txt。该新式排序行为在 Windows XP Service Pack 2 和更新系统中可用。 8. Ctrl+W 组合键现在用于关闭主 WinRAR 窗口以及 WinRAR 查看器窗口。在 WinRAR 查 看器中的“以 Windows 文本方式查看”快捷键从 Ctrl+W 变为 Ctrl+I。 9. 新的命令行开关 -r- 可以完全禁用递归。 因此“rar a -r- arc 目录名称”命令将仅添加空目录名称文件夹并且忽略它的内容。缺省状态下如果目录名称不包含通配符, 即使未指定 -r 开关, RAR 也添加它的内容。 10. 如果在解压时使用新的命令行开关 -ai, 则它会强制 RAR 忽略文件属性。当使用该开关时, 解压缩出来的新建文件将默认总是使用由操作系统分配的属性。 11. 如果未在“cw”命令中指定输出文件名称, 控制台 RAR 将发送注释数据为标准输出。 12. 当使用 -si[名称] 开关压缩标准输入数据时, RAR 将压缩文件项的修改时间设置为当前系统时间。上一版 RAR 未填充该字段, 导致标准输入修改时间错误。 13. 当你将鼠标光标置于任务栏中的 WinRAR 图标时, 现在显示包含的压缩文件名称。以前仅显示剩余时间和压缩操作时的总计百分比。 14. 在 SoftwareWinRARPolicy 注册表键新增了 Shutdown (关机) 变量, 允许禁用基于安全原因的“完成后关闭计算机”选项。 参见“配置设置/注册表变量”获取更多明细。 15. 进一步改善了资源管理器外壳扩展性能。现在当 WinRAR 选择数千个文件时, 关联菜单能够更快的响应。 16. 改进了高 DPI Windows 显示模式的兼容性。 17. 错误修正: a) 如果压缩文件包含一个大于 8 GB 的文件, 则 WinRAR 打开 tar 或 tar.gz 压缩文件可能会失败; b) WinRAR 关联菜单在 Windows 7 beta 中不能正常工作 (如果启用了关联菜单中的图标, 并且用户单击一个 Windows 7 库文件夹中的文件); c) 上一版本的 WinRAR 在重命名含有 5 或更多个连接空格的文件名称时失败。基于安全原因, WinRAR 不显示这样的空格, 因为它们有可能隐藏实际的文件扩展名。但这个安全措施妨碍了重命名命令的正确运行。

62,046

社区成员

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

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

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

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