积极答复者
如何将地址栏的内容变换编码!

问题
-
大虾:
我在C#里面需要在显示的时候将地址栏的地址进行编码,我用Server.htmlEncode(str)时就会显示完整正确的地址位置,附件也能够打开,但是如果换成server.UrlEncode(str)时,地址栏的编码却是变了,但是我的附件文件也打不开了,因为地址路径不对。例如:用Server.htmlEncode(str)时,地址栏为:http://xxx/file/xxx/xxx.xls 但是如果用server.UrlEncode(str) 地址栏就变成:http://当前该页面程序所在的位置/2%file%xxx.xls但是,文件也打不开,请问如何解决啊,什么问题?谢谢!
答案
-
http://localhost:2216/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc
只编码里面的中文,
你现在编码的是Gb2312,不是UTF8编码,地址应当默认应当是utf-8编码的,
天朗明居天麟第的utf-8编码是:
%E5%A4%A9%E6%9C%97%E6%98%8E%E5%B1%85%E5%A4%A9%E9%BA%9F%E7%AC%AC
Gb2312编码是:
%CC%EC%C0%CA%C3%F7%BE%D3%CC%EC%F7%EB%B5%DA
如何编码成utf-8?
-
bigertiger 写: Cat Chen 写: UrlEncode是對的,HtmlEncode跟URL半點關係都沒有。至於打不開,應該是服務器的配置問題,使得服務器不接受你編碼後的URL。把一個編碼前的URL和一個編碼後的URL發上來看看吧。 这是我用Server.HtmlEncode 显示并可以打开附件的地址:
http://localhost:2216/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc
这是我用Server.UrlEncode转换后不能打开附件的地址:
对比了一下,好像前面竟然多了我当前页面程序所在的目录,奇怪
你传给UrlEncode的是"/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc",对吧?UrlEncode不至于只能到好像JavaScript的encodeURIComponent那样,知道哪些是URL中原有的英文字符,哪些是要编码的非英文字符,所以你必须将要编码的中文字符传给它,也就是"天朗明居天麟第"和"SA08AC5000051标的名称1"以及"规划文档"。
全部回复
-
楼主, server.UrlEncode 是用来传递网页地址用的, 最常见的是在url的参数中传递另外一个url地址:
http://aaa.com/a.aspx?nexturl=[*****]
上面的[****]是一个网站, 如果要通过url传值,则一定要首先进行server.UrlEncode 编码(注意不要用HttpUtility.UrlEncode)
当我们使用Request获取参数是,会自动解码,这里一定要注意,不要再使用server.UrlDecode方法, 因为Request会自动进行一次解码.
server.UrlEncode 会将中文以及一些url特殊符号进行编码.
如果不是传递url,而是要使用url, 则不能进行server.UrlEncode编码.
作为HTML显示的时候, 将数据库中读取的数据,比如地址,进行Server.htmlEncode是正确的.这样如果一个非法的地址,比如:
http://bbb.com/<script language="javascript">****</script>
上面这种地址直接显示在页面就会造成脚本注入攻击.
显示前先进行Server.htmlEncode, 则页面上会原封不动的显示上面的地址,而不会将script块作为脚本处理.
-
Cat Chen 写: UrlEncode是對的,HtmlEncode跟URL半點關係都沒有。至於打不開,應該是服務器的配置問題,使得服務器不接受你編碼後的URL。把一個編碼前的URL和一個編碼後的URL發上來看看吧。 这是我用Server.HtmlEncode 显示并可以打开附件的地址:
http://localhost:2216/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc
这是我用Server.UrlEncode转换后不能打开附件的地址:
对比了一下,好像前面竟然多了我当前页面程序所在的目录,奇怪
-
bigertiger 写: Cat Chen 写: UrlEncode是對的,HtmlEncode跟URL半點關係都沒有。至於打不開,應該是服務器的配置問題,使得服務器不接受你編碼後的URL。把一個編碼前的URL和一個編碼後的URL發上來看看吧。 这是我用Server.HtmlEncode 显示并可以打开附件的地址:
http://localhost:2216/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc
这是我用Server.UrlEncode转换后不能打开附件的地址:
对比了一下,好像前面竟然多了我当前页面程序所在的目录,奇怪
明显是路径不一样啊。你进行UrlEncode的时候没有计算对,/无需编码,是正确的分隔符
-
孟宪会 写: bigertiger 写: Cat Chen 写: UrlEncode是對的,HtmlEncode跟URL半點關係都沒有。至於打不開,應該是服務器的配置問題,使得服務器不接受你編碼後的URL。把一個編碼前的URL和一個編碼後的URL發上來看看吧。 这是我用Server.HtmlEncode 显示并可以打开附件的地址:
http://localhost:2216/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc
这是我用Server.UrlEncode转换后不能打开附件的地址:
对比了一下,好像前面竟然多了我当前页面程序所在的目录,奇怪
明显是路径不一样啊。你进行UrlEncode的时候没有计算对,/无需编码,是正确的分隔符
但是我将前面不同的部分去掉,仍然是读不到附件啊
-
http://localhost:2216/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc
只编码里面的中文,
你现在编码的是Gb2312,不是UTF8编码,地址应当默认应当是utf-8编码的,
天朗明居天麟第的utf-8编码是:
%E5%A4%A9%E6%9C%97%E6%98%8E%E5%B1%85%E5%A4%A9%E9%BA%9F%E7%AC%AC
Gb2312编码是:
%CC%EC%C0%CA%C3%F7%BE%D3%CC%EC%F7%EB%B5%DA
如何编码成utf-8?
-
bigertiger 写: Cat Chen 写: UrlEncode是對的,HtmlEncode跟URL半點關係都沒有。至於打不開,應該是服務器的配置問題,使得服務器不接受你編碼後的URL。把一個編碼前的URL和一個編碼後的URL發上來看看吧。 这是我用Server.HtmlEncode 显示并可以打开附件的地址:
http://localhost:2216/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc
这是我用Server.UrlEncode转换后不能打开附件的地址:
对比了一下,好像前面竟然多了我当前页面程序所在的目录,奇怪
你传给UrlEncode的是"/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc",对吧?UrlEncode不至于只能到好像JavaScript的encodeURIComponent那样,知道哪些是URL中原有的英文字符,哪些是要编码的非英文字符,所以你必须将要编码的中文字符传给它,也就是"天朗明居天麟第"和"SA08AC5000051标的名称1"以及"规划文档"。
-
孟宪会 写: http://localhost:2216/File/BZ0001/天朗明居天麟第/SA08AC5000051标的名称1/规划文档.doc
只编码里面的中文,
你现在编码的是Gb2312,不是UTF8编码,地址应当默认应当是utf-8编码的,
天朗明居天麟第的utf-8编码是:
%E5%A4%A9%E6%9C%97%E6%98%8E%E5%B1%85%E5%A4%A9%E9%BA%9F%E7%AC%AC
Gb2312编码是:
%CC%EC%C0%CA%C3%F7%BE%D3%CC%EC%F7%EB%B5%DA
如何编码成utf-8?
Response.Write(HttpUtility.UrlEncode("天朗明居天麟第",System.Text.Encoding.UTF8));
孟兄,你好!我的编码确实不是UTF-8的,用的是GB2312的,但是如果我改成了UTF-8的话,我的有些页面就会出现乱码的现象。不知道如何解决所以才换成GB2312的
-
孟宪会 写: iis 假死,要先看看事件查看器,里面报告什么。
光从假死这2两个字面上无法进行解决这是我的问题描述地址:
http://forums.microsoft.com/china/ShowPost.aspx?PostID=4291185&SiteID=15
-
你好, bigertiger
因为你的第一个问题已经解决了,所以我建议你重新开一个新帖。
这样可以让一个帖子集中解决一个主题,也可以让你得到更多相关专家的帮助。