URL转义符和XML转义符

 在开发类似csdn树型结构时,左边树型结构的结点如果带两个参数时,不能正常显示,原因是不识别某些特殊符号,如:

'<node text="内部通信录" url="/Personnel/person_list.aspx?type=P&p_no=N" target="main" />'

这样写时系统不识别“&”,而无法正常显示

如果改为:

'<node text="内部通信录" url="/Personnel/person_list.aspx?type=P%26p_no=N" target="main" />'

就可以正常显示了,

 

 

一、URL转义符

web 开发中通过问号(?)方式在浏览器地址栏中传值时。浏览器是通过“&”来区分问号后的参数个数的。 如果出现传值参数中带有“&”时,在接受页面就会出现错误,类似如下请求路径:/next.jsp?param1=hendhs89&furej & param2=sss
参数param1中含有转义字符“&” ,这样会导致被请求页的参数接收错误。
在传值前 通过 java.net.URLEncoder.encode(param1) 编码处理后,可将转义字符转为16进制;
1. + URL 中+号表示空格 %2B
2. 空格 URL中的空格可以用+号或者编码 %20
3. / 分隔目录和子目录 %2F
4. ? 分隔实际的 URL 和参数 %3F
5. % 指定特殊字符 %25
6. # 表示书签 %23

......

            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("@", "%40");
            dict.Add(":", "%3A");
            dict.Add(",", "%2C");
            dict.Add("+", "%2B");

            dict.Add(" ", "%20");
            dict.Add("/", "%2F");
            dict.Add("?", "%2B");
            dict.Add("%", "%25");
            dict.Add("#", "%23");
            dict.Add("&", "%26");
            dict.Add("=", "%3D");
            dict.Add("!", "%21");

            dict.Add("^", "%5E");
            dict.Add("`", "%60");
            dict.Add("{", "%7B");
            dict.Add("}", "%7D");
            dict.Add("|", "%7C");
            dict.Add("[", "%5B");
            dict.Add("]", "%5D");
            dict.Add("\"", "%22");
            dict.Add("<", "%3C");
            dict.Add(">", "%3E");
            dict.Add("\\", "%5");
            foreach (var item in dict)
            {
                Console.WriteLine(item.Key+"-----"+item.Value);
            }



二、在XML中的转义符又不一样:

字符        HTML字符    字符编码 
和(and) &   &amp;       &#38; 
单引号 '    &apos;      &#39; 
双引号 "    &quot;      &#34; 
大于号 >    &gt;        &#62; 
小于号 <    &lt;        &#60; 



### 回答1: 在向前端返回 XML 数据时,可以使用 HTTP 头部设置 Content-Type 为 "application/xml" 或 "text/xml",这样浏览器就能正确识别并解析 XML 格式的数据,而不会对其进行转义。在返回数据时进行编码设置 utf-8, 也是防止被转义的一种方法 在代码中可以使用 `response.headers["Content-Type"] = "application/xml; charset=utf-8"` 或 `response.headers["Content-Type"] = "text/xml; charset=utf-8"`来设置 HTTP 头部信息。 ### 回答2: 后端返给前端XML时,需要注意防止XML转义的问题。可以使用以下方法来避免XML转义: 1. 使用CDATA标签:可以将XML数据包裹在<![CDATA[ ]]>标签中,这样可以告诉解析器不对该部分进行转义,而是原样输出。 例如,将XML数据包裹在CDATA标签中: <![CDATA[<data>Hello World</data>]]> 2. 转义特殊字符:如果数据中包含了XML的特殊字符(如<、>、"、'、&等),需要将其转义为对应的实体引用。 例如,将"<"转义为"<",">"转义为">","&"转义为"&"等。 3. 使用XML声明:在返回的XML数据中添加XML声明部分(<?xml version="1.0" encoding="UTF-8"?>),指定XML的版本和编码方式。这样可以告诉解析器如何对XML进行解析,避免误解为需要转义。 例如: <?xml version="1.0" encoding="UTF-8"?> <data>Hello World</data> 综上所述,通过使用CDATA标签、转义特殊字符和添加XML声明等方法,可以有效防止后端返回的XML被前端转义。这样可以确保XML数据在前端能够正确解析和显示,避免因为转义而导致的数据错误。 ### 回答3: 在后端将 XML 数据返回给前端时,为了防止 XML 数据被转义,可以采取以下措施: 1. 使用转义字符进行转义:在生成 XML 数据时,可以使用转义字符来转义特殊字符,比如将"<"转义为"<"、">"转义为">"、"&"转义为"&"等。这样可以确保特殊字符不会被解析器误认为是 XML 标签。 2. 使用 CDATA 包裹数据:CDATA(Character Data)是一种在 XML 文件中包含文本数据的方式,CDATA 区块中的数据可以包含任意字符,包括特殊字符。把需要返回给前端的 XML 数据放置在 CDATA 区块中,可以确保文本数据不被解析器解析。 3. 设置 Content-Type 头信息:在后端返回 XML 数据时,可以通过设置 Content-Type 头信息为"application/xml"或"text/xml"来告知浏览器或前端代码,返回的数据是 XML 格式的。这样浏览器或前端代码在接收到数据时会正确地处理 XML 数据,不会误认为是普通的字符串或 HTML 数据。 4. 对特殊字符进行编码:使用 URL 编码或 Base64 编码等方式对 XML 数据中的特殊字符进行编码,这样可以确保特殊字符传输的安全性,并且在前端接收时进行解码还原。 综上所述,通过适当转义特殊字符、使用 CDATA、设置正确的 Content-Type 头信息以及对特殊字符进行编码,就可以有效地防止后端返给前端的 XML 数据被转义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值