求解,htmlencode和urlencode的区别,适用场合

求解,htmlencode和urlencode的区别,适用场合,第1张

htmlencode的目的:将<和>尖括号等符号转掉,避免网页直接渲染标签,防止攻击。

"<hello>world</hello>"

转成

"<hello>world</hello>"

urlencode的目的:将url中的特殊字符转义,让浏览器方便处理,比如空格、加号等

(url只能使用ASCII character-set,除此之外,都要转义)

"hello+world = hello world"

转成

"hello%2Bworld+%3D+hello+world"

除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。

json的Marshal 用来对slice,map,struct等结构化类型数据转义成[]byte/string,UnMarshal方法是用来对[]byte/string转义成指定结构的interface。但在处理html标签字符中,会存在转义问题。Marshal方法默认把html标签中的'<', '>' , '&'字符转义成unicode,为强制为有效UTF-8的JSON字符串,用Unicode替换符号替换无效字节。

go doc原文

Marshal的源码

这一行encOpts{escapeHTML: true}),这里的true导致标签被转义。

针对上述问题,有两种解决办法,第一种是替换上述三个tag,第二种是SetEscapeHtml(false);

输出:

编码中文 unicode字符到 html 编码格式的。

比如 你在浏览器中 输入 http://hi.biadu.com/你想干什么/这样感觉不好

这时就需要用

string url = Server.HTMLEncode( "http://hi.biadu.com/你想干什么/" )

然后就可以用下面语句来跳到那个网页上去。

Server.Redirect(url)

编码后的中文字符都会变成 %CE%D2%CA%C7&什么的,

你试一下就知道了

另外就是 可以把< >等不安全的字符串改成 html编码, 这样在客服端呈现出来的时候才能避免不正常的显示。

string url = Server.HTMLEncode( "<input type = input value=hahahha>" )

textBox1.text = url

这是MNSDN的解释

The HTMLEncode method applies HTML encoding to a specified string. This is useful as a quick method of encoding form data and other client request data before using it in your Web application. Encoding data converts potentially unsafe characters to their HTML-encoded equivalent.

If the string to be encoded is not DBCS, HTMLEncode converts characters as follows:

The less-than character (<) is converted to <.

The greater-than character (>) is converted to >.

The ampersand character (&) is converted to &.

The double-quote character (") is converted to ".

Any ASCII code character whose code is greater-than or equal to 0x80 is converted to <number>, where <number>is the ASCII character value.

If the string to be encoded is DBCS, HTMLEncode converts characters as follows:

All extended characters are converted.

Any ASCII code character whose code is greater-than or equal to 0x80 is converted to <number>, where <number>is the ASCII character value.

Half-width Katakana characters in the Japanese code page are not converted.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7380882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存